Rails фабрики, имеющие несколько ассоциаций к одному объекту - PullRequest
0 голосов
/ 01 января 2019

У меня есть модель, которая имеет ассоциации, подобные этой: -

 class Order < ApplicationRecord
  belongs_to :customer, inverse_of: :orders
  belongs_to :user, inverse_of: :orders
  belongs_to :shipping_address, class_name: "Customer::Address", inverse_of: :shipped_orders
  belongs_to :billing_address, class_name: "Customer::Address", inverse_of: :billed_orders
end

Кроме того, customer_address имеет поле customer_id.Моя фабрика выглядит так: -

FactoryGirl.define do
  factory :order do 
    customer
    user
    association :shipping_address, factory: :customer_address, customer_id: customer.id 
    association :billing_address, factory: :customer_address, customer_id: customer.id
  end
end

Но я не могу получить доступ к customer.id.Я получаю эту ошибку: -

undefined method `id' for #<FactoryGirl::Declaration::Implicit:0x007fa3e6979d70>

Как передать customer.id ассоциации shipping_address и billing_address?

1 Ответ

0 голосов
/ 01 января 2019

Вы можете использовать обратный вызов after(:build) для создания ваших customer_address записей.

FactoryGirl.define do
    factory :order do 
        association :customer
        association :user
        after(:build) do |order|
            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
...