План машиниста, когда модель принадлежит 2 ассоциациям has_many - PullRequest
0 голосов
/ 14 октября 2011

Среда: 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

Я бы хотел сделать Machinistчертежи для учетной записи и категории, которая создает несколько транзакций, например:

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

Поскольку для транзакции требуется как учетная запись, так и категория, вышеуказанные чертежи не выполняются, потому что, когда Account.make!называется Транзакции, которые не имеют связанных категорий и когда Category.make!называется Созданные транзакции, не имеющие связанных учетных записей.Я пытался вручную создавать транзакции внутри чертежей «Учетная запись» и «Категория», но в итоге получаю бесконечные циклы.

Любой совет будет принят с благодарностью!

Спасибо!

1 Ответ

2 голосов
/ 14 октября 2011

Попробуйте это.

Передайте Массив Хэшей, который можно передать отдельным чертежам. Вот пример.

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 соответственно, если вы столкнулись с той же проблемой, но вы можете указать их в чертеже.

...