在我的应用中,我有:
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}}条记录,则该应用程序应自动创建一个。
答案 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)