Создание профиля в пользовательской модели для регистрации, является ли 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 разрешить ноль или нет)

Другие вопросы по тегам