2014-11-24 3 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 

Как автоматически создать Wallet для пользователя, который не имеет ни когда WalletTransaction добавляется для этого пользователя. Пример:

@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) 

UPDATE: я неправильно понял вопрос, то вы должны создать бумажник первым, если он не существует, а затем обратитесь к операциям через @wallet инстанции. Это также гарантирует, что wallet_id of WalletTransaction всегда ссылается на правильный кошелек.

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

Это не может быть правильно. Я хочу автоматически создать новый Кошелек для Пользователя. Этот код не будет работать, если у пользователя нет записи кошелька. –

+0

@FavouriteChigozieOnwuemene привет, я неправильно понял вопрос. Я обновил ответ выше –