自动创建ActiveRecord父级以进行关联

时间:2014-11-24 03:41:11

标签: ruby-on-rails activerecord ruby-on-rails-2

在我的应用中,我有:

class Wallet < ActiveRecord::Base
  belongs_to :owner, :polymorphic => true
  has_many   :transactions, :class_name => 'WalletTransaction'
end

class WalletTransaction < ActiveRecord::Base
  belongs_to :wallet
end

class User < ActiveRecord::Base
  has_one    :wallet, :as => :owner
  has_many   :wallet_transactions, :through => :wallet, :source => :transactions
end

如果为该用户添加Wallet时没有的用户,如何自动为WalletTransaction创建@user = User.find(1) @wallet_transaction = @User.wallet_transactions.new(attributes) 。例如:

Wallet

如果上面的代码已经运行且学生在数据库中没有{{1}}条记录,则该应用程序应自动创建一个。

1 个答案:

答案 0 :(得分:1)

您可以使用first_or_create

@wallet_transaction = @user.wallet_transactions.first_or_create(attributes)

更新: 我误解了这个问题,你应该先创建钱包(如果不存在),然后通过@wallet实例引用交易。这样做还可以确保WalletTransaction的wallet_id始终引用正确的钱包。

@wallet = @user.wallet.first_or_create
@wallet_transaction = @wallet.transactions.new(attributes)