Ho una fabbrica factorygirl, che crea un Order
ma la prima (: creare) callback non crea l'oggetto factory associato:factorygirl prima (: creare) non richiamata la creazione di associazioni
classe genitore
class Order < ActiveRecord::Base
attr_accessible :tax, :total
has_many :order_lines
validates :user, presence: true
validates :order_lines , presence: true
end
Bambino Classe
class OrderLine < ActiveRecord::Base
attr_accessible :order, :product, :qty
belongs_to :order
belongs_to :product
...
...
validates :order, presence: true
end
fabbrica
Factory :order do
...
ignore do
number_or_order_lines 1
end
before(:create) do |order, evaluator|
FactoryGirl.create_list :order_line, evaluator.number_or_order_lines, order: order
end
end
Factory :order_line do
association :user
association :order
...
end
PROBLEMA
Nella mia prova RSpec, se creo un oggetto ordine:
describe Order do
before {@order = FactoryGirl.create(:order) } => #throws error (see below)
end
ERRORE ActiveRecord :: RecordInvalid Validazione fallita Ordine linee possono essere vuoto
UPDATE
Posso tuttavia con successo effettuare le seguenti operazioni, ma ovviamente solo compie la creazione di uno:
after(:build) do |order, evaluator|
order.order_lines << FactoryGirl.build(:order_line, order: order)
end
Ipotesi - posso vedere dove la create_list
potrebbe essere il tentativo di salvare il OrderLine
che causerebbe un errore dal momento che il genitore non è stato salvato - ma non so se restituisce ancora un oggetto OrderLine che si trova solo in uno stato non valido e quindi la raccolta order_lines nell'oggetto ordine non dovrebbe essere ancora vuota.
Provare a utilizzare dopo (: build) al posto di prima (: creare) –
Aggiornamento del problema con le nuove informazioni - Ho provato il dopo (: build) oltre a utilizzare build_list anziché create_list. Sfortunatamente, l'unico modo in cui funzionerà se la validazione per order_lines sul modello Order. – pghtech
Sto affrontando lo stesso numero –