Проблема массового присваивания при создании экземпляра модели - PullRequest
0 голосов
/ 29 июля 2011

У меня есть модель пользователя (Devise), и я создал модель профиля с отношением has_one / assign_to.Я пытаюсь автоматически создать профиль, когда пользователь создается следующим образом:

class User < ActiveRecord::Base   
   has_many :videos, :dependent => :destroy
   has_one :profile, :dependent => :destroy

    after_create :create_profile

  # Include default devise modules. Others available are:
  # :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable, :confirmable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me

  protected

  def create_profile
    Profile.create :user_id => self.id
  end

end

Профиль создается, но идентификатор пользователя не заполняется.Я получаю предупреждение о массовом назначении в отношении настройки: user_id в профиле, потому что у меня есть attr_accessible, выставляющий несколько полей в профиле.

Я не хочу удалять attr_accessible, но не понимаю, почему установка одного поля считается массовойназначение.Я подумал, что это может быть связано с передачей хеша, поэтому я попробовал следующее в качестве обходного пути:

@profile = Profile.create
@profile.user_id = self.id

Это удаляет предупреждение, но user_id все еще не устанавливается в профиле.Как правильно решить эту проблему?

Любая ясность высоко ценится!:)

1 Ответ

1 голос
/ 29 июля 2011

Вы звоните @ profile.save в конце вашего обходного пути?

Может быть, вы можете попробовать это:

def create_profile
  self.build_profile.save
end
...