Создание профиля в пользовательской модели для регистрации, является ли user_id в attr_accessible большой ошибкой?
Используя devise в качестве моей системы аутентификации, я хотел бы создать свой профиль при регистрации пользователя.
Я прочитал много тем об этом в SO и решил использовать подход построения профиля в модели:
profile.rb
class Profile < ActiveRecord::Base
belongs_to :user
attr_accessible :user_id, # FIXME This is secure?
end
user.rb
class User < ActiveRecord::Base
devise ...
has_one :profile
accepts_nested_attributes_for :profile
def build_profile
Profile.create(:user_id => id)
end
end
Мои два вопроса:
Опасно ли иметь user_id в attr_accessible (массовое назначение)?
Нужно ли было помещать создание моего профиля в контроллер (создание регистрации) с помощью транзакции? (Здесь, если мой профиль не удается построить, у меня все еще есть запись пользователя)
1 ответ
Опасно ли иметь user_id в attr_accessible (массовое назначение)?
да, вам следует избегать добавления внешних ключей в attr_accessible большую часть времени, хотя есть сценарий, который можно использовать (если ассоциация общедоступна, как, например, страны) или если вы переопределяете установщик и делаете какую-то проверку...
Нужно ли было помещать создание моего профиля в контроллер (создание регистрации) с помощью транзакции? (Здесь, если мой профиль не удается построить, у меня все еще есть запись пользователя)
просто добавь validates_associated :profile
в модели пользователя и, возможно, также validates :profile, presence: true
(вроде забыл, если validates_associated разрешить ноль или нет)