我正在使用Ruby on Rails 3,我成功使用嵌套模型来保存模型\对象关联。
在用户模型文件中我有:
class User < ActiveRecord::Base
has_one :account
accepts_nested_attributes_for :account
validates_associated :account
end
在@user.save
之后,我想检索刚创建的帐户ID,并将该值保存在用户数据库表中。我需要这个,因为我会使用account_id
作为用户类的外键,但我不知道是否可能。如果是这样,我该怎么做?
在我的用户模型中,我也尝试了以下内容:
before_create :initialize_user
def initialize_user
user_account = Account.create
self.account_id = user_account.id
end
但它不起作用。
更新
我试过这个
class User < ActiveRecord::Base
belongs_to :account,
:class_name => "Account",
:foreign_key => "users_account_id"
end
class Account < ActiveRecord::Base
has_one :user,
:class_name => "User",
:foreign_key => "users_account_id"
end
并保存新帐户。无论如何,在用户数据库表中,users_account_id
列为null
,因此不会自动保存foreign_key值。
答案 0 :(得分:0)
方法错了。当您具有“has_one”关系时,它们的外键位于关联模型中。所以在你的情况下,它将考虑在内。如果它接受帐户的嵌套属性。如果您正在写,那么默认情况下应该注意这一点。
看看http://railscasts.com/episodes/196-nested-model-form-part-1和其他部分,看看嵌套表单的工作原理
答案 1 :(得分:0)
def initialize_user
user_account = Account.create
self.account_id = user_account.id
end
应该是
def initialize_user
self.account.create
end
创建新的Account实例时,它将自动使用有关当前用户的信息。您的方法可行,但您需要添加额外的“保存”调用。