2011-10-13 4 views
0

Environnement: Ruby 1.9.2, Rails 3.1, Machinist 2Plan Machiniste lorsque le modèle appartient à 2 associations has_many

J'ai un modèle de transaction qui appartient à la fois un compte et la catégorie.

class Transaction < ActiveRecord::Base 
    belongs_to :account 
    belongs_to :category 

    validates_presence_of :account_id, :category_id 
end 

class Account < ActiveRecord::Base 
    has_many :transactions 
end 

class Category < ActiveRecord::Base 
    has_many :transactions 
end 

Je voudrais faire des plans Machinist pour le compte et la catégorie qui crée de multiples transactions, comme ceci:

Account.blueprint do 
    name { "Account #{sn}" } 
    transactions(3) 
end 

Category.blueprint do 
    name { "Category Name #{sn}"} 
    transactions(3) 
end 

Transaction.blueprint do 
    date { Date.current } 
    amount { "#{rand(100000)}.#{rand(100)}" } 
    description { "Transaction description #{sn}"} 
end 

Depuis une transaction nécessite à la fois un compte et catégorie les plans ci-dessus échouent parce que quand compte. faire! est appelé les Transactions créées n'ont pas de Catégories associées et quand Category.make! est appelé Les Transactions créées n'ont pas de Comptes associés. J'ai essayé de créer manuellement les transactions dans les blueprints de compte et de catégorie mais je finis dans des boucles infinies.

Un conseil serait grandement apprécié!

Merci!

Répondre

2

Essayez ceci. Passez un tableau de hachages pouvant être transmis à des plans distincts. Voici un exemple.

Account.blueprint do 
    name   { "Accouunt#{sn}" } 
    transactions { [{:amount => 10}, {:amount => 20}] } 
end 

Si vous ne voulez pas passer des paramètres à la transaction, juste passer Hashes vide:

Account.blueprint do 
    name   { "Accouunt#{sn}" } 
    transactions { [{}] * 3 } # 3 transactions 
end 

Vous devrez peut-être passer explicitement les :category et :account les options en conséquence si vous avez la même problème, mais vous pouvez les contenir au plan.

Questions connexes