В моем приложении.У меня есть модели - заказать has_many order_items, счет-фактура has_many invoice_items.Я создаю фабрику для элементов order и order_items следующим образом: -
Фабрика заказов: -
FactoryGirl.define do
factory :order do
booked_at {Date.current}
approved_at {Date.current}
state "draft"
customer
user
notes "NOTE !!!"
ip_address "127.0.0.1"
approver_id 1
channel "mobile"
transient do
order_items_count { 5 }
end
order_items_attributes do
attributes = []
order_items_count.times do
# We are not using attributes_for(:order_item) below as attributes_for do not generate attributes for association (varint in this case)
attributes << attributes_with_foreign_keys_for(:order_item)
end
attributes
end
after(:build) do |order|
order.customer.reload # Do not remove this, if you remove this customer.default_address and customer.shipping_address etc won`t show up in customer.addresses
order.shipping_address = FactoryGirl.build(:customer_address, customer_id: order.customer_id)
order.billing_address = FactoryGirl.build(:customer_address, customer_id: order.customer_id)
end
end
end
Фабрика OrderItem: -
FactoryGirl.define do
factory :order_item do
association :variant, factory: :product
booked_quantity 10
price 50
end
end
Теперь, когда я создаюМоя фабрика счетов-фактур и накладных, я столкнулся с проблемой, заключающейся в том, что позиции накладных зависят от позиций заказа.Похоже, что создается первый заказ, только после этого можно создавать счета-фактуры.
Фабрика счетов-фактур: -
FactoryGirl.define do
factory :invoice do
date "2018-03-05"
due_date "2018-03-05"
user
invoice_term
transient do
invoice_items_count { 5 }
end
invoice_items_attributes do
attributes = []
invoice_items_count.times do
# We are not using attributes_for(:invoice_item) below as attributes_for do not generate attributes for association (varint in this case)
attributes << attributes_with_foreign_keys_for(:invoice_item)
end
attributes
end
after(:build) do |invoice|
@order = create(:order, state: "confirm")
@customer_id = @order.customer_id
invoice.customer_id = @customer_id
end
end
end
Фабрика элементов счетов-фактур: -
FactoryGirl.define do
factory :invoice_item do
variant_id 1
order_item_id 1
quantity "9.99"
price "9.99"
item_total "9.99"
discount_total "9.99"
tax_total "9.99"
tax_category_id 1
end
end
Теперь, вмоя фабрика элементов счета, в которую я поместил вариант_идентификатора 1, порядковый_элемент_ид 1, он должен исходить из уже созданного элемента_порядка (а не 1 для каждого элемента-фактуры).Как я могу это сделать?