0

環境: Ruby 1.9.2、Rails 3.1、Machinist 2

アカウントとカテゴリの両方に属するトランザクション モデルがあります。

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

次のように、複数のトランザクションを作成するアカウントとカテゴリの機械工の設計図を作成したいと思います。

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

トランザクションにはアカウントとカテゴリの両方が必要なため、上記の設計図は失敗します。作成されたトランザクションは関連付けられたカテゴリを持たず、Category.make! の場合と呼ばれます。関連付けられたアカウントを持たないトランザクションが作成されます。Account および Category ブループリント内で手動でトランザクションを作成しようとしましたが、無限ループに陥ります。

どんなアドバイスでも大歓迎です!

ありがとう!

4

1 に答える 1

2

これを試して。

別のブループリントに渡すことができるハッシュの配列を渡します。これが例です。

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

パラメータをトランザクションに渡したくない場合は、空のハッシュを渡すだけです。

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

同じ問題が発生した場合は、それに応じてオプション:categoryとオプションを明示的に渡す必要がある場合がありますが、それらをブループリントに含めることができます。:account

于 2011-10-13T22:57:23.357 に答える