2014-11-24 44 views
0

在我的應用程序,我有:自動創建的ActiveRecord母公司的關聯

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 

如何自動創建時WalletTransaction添加該用戶誰現在沒有一個用戶Wallet。例如:

@user = User.find(1) 
@wallet_transaction = @User.wallet_transactions.new(attributes) 

如果上面的代碼運行和學生在數據庫中沒有Wallet記錄,應用程序會自動創建一個。

回答

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) 
+0

這不可能是正確的。我想爲用戶自動創建一個新的電子錢包。如果用戶沒有開始使用電子錢包記錄,則此代碼不起作用。 – 2014-11-24 04:01:50

+0

@FavouriteChigozieOwuemene嗨,我誤解了這個問題。我已經更新了上面的答案 – 2014-11-24 08:05:58