【发布时间】:2011-07-18 10:03:19
【问题描述】:
我正在使用 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 值不会自动保存。
【问题讨论】:
-
@user.account.id不起作用? -
使用 has_... 通常意味着该模型将具有主键。 belongs_to 的任何模型通常都会包含外键。您是否考虑过在帐户模型中执行“belongs_to”来维持关系?
-
@mway 我认为我必须主要在控制器中使用它。也许在模型中我必须使用回调,但是否有可能如果另一个人创建自己的用户,那个人会得到相同的 account.id 值?(!)无论如何,我想找到一些“直接的方式” "。
-
@Will Ayd 哎呀——是的,你完全正确,@user.account.id 可能会执行不必要的查找。 @user502052 - 你确定关系保存正确吗? Rails 自动更新中的 IIRC 模型,因此无需实际获取更多信息;它应该是可用的。不过在 v3.x 中可能发生了变化。
-
@mway 说:“你确定这段关系被正确保存了吗?” - 是的,该帐户已正确存储在数据库中。
标签: ruby-on-rails ruby ruby-on-rails-3 methods associations