如何检索刚使用嵌套方法创建的帐户ID?

时间:2011-03-18 19:05:18

标签: ruby-on-rails ruby ruby-on-rails-3 methods associations

我正在使用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值。

2 个答案:

答案 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实例时,它将自动使用有关当前用户的信息。您的方法可行,但您需要添加额外的“保存”调用。