我有一个用户模型(Devise),并创建了一个has_one / belongs_to关系的Profile模型。我正在尝试按如下方式创建用户时自动创建配置文件:
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
创建配置文件但不填充用户ID。我收到了关于在配置文件中设置:user_id的批量分配警告,因为我有attr_accessible暴露了配置文件上的几个字段。
我不想删除attr_accessible,但不明白为什么设置一个字段被视为质量分配。我认为这可能与传递哈希有关,所以我尝试了以下作为解决方法:
@profile = Profile.create
@profile.user_id = self.id
这会删除警告,但仍未在配置文件中设置user_id。解决这个问题的正确方法是什么?
任何清晰度都非常感谢! :)
答案 0 :(得分:1)
您是否在解决方法结束时调用了@ profile.save?
也许你可以试试这个:
def create_profile
self.build_profile.save
end