当找不到关联时,Activerecord has_one构建新的

时间:2014-04-28 09:43:59

标签: ruby-on-rails ruby activerecord

所以我有这种模特关系

class User
  has_one :wallet, :foreign_key => :user_id
end

class Wallet
  after_initialize :set_value

  def set_value
    # Whatever
  end
end

当我User.last.wallet User.last.wallet.newUser召唤时,我会这样。

我可以通过在 def get_wallet self.wallet||self.wallet.new end 模型中创建另一种方法来实现这一目标:

get_wallet

并在需要时致电 has_one :wallet, :foreign_key => :user_id #, :build_if_not_found => true

但是如果没有这种无用而又脏的额外方法,我不能得到这个吗? 类似的东西:

Wallet

像这样的宝石:https://github.com/febuiles/auto_build没有做我想做的事情:他们在创建User对象后构建User.last.wallet而不是在调用{{1}}时创建。 / p>

由于

1 个答案:

答案 0 :(得分:1)

你可以试试这个:

class User
  has_one :wallet, :foreign_key => :user_id

  def wallet
    super || build_wallet
  end
end

您仍然需要添加一些额外的代码,但它可以完全按照您的意愿执行,而无需任何额外的调用。