tôi có một nhà máy FactoryGirl, tạo ra một Order
nhưng trước (: tạo) gọi lại không tạo ra các đối tượng nhà máy liên quan:FactoryGirl trước (: tạo) gọi lại không tạo ra các hiệp hội
Lớp Chánh
class Order < ActiveRecord::Base
attr_accessible :tax, :total
has_many :order_lines
validates :user, presence: true
validates :order_lines , presence: true
end
Child Lớp
class OrderLine < ActiveRecord::Base
attr_accessible :order, :product, :qty
belongs_to :order
belongs_to :product
...
...
validates :order, presence: true
end
Factory
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
VẤN ĐỀ
Trong thử nghiệm rspec của tôi, nếu tôi có thể tạo một đối tượng theo thứ tự:
describe Order do
before {@order = FactoryGirl.create(:order) } => #throws error (see below)
end
LỖI ActiveRecord :: RecordInvalid Validation thất bại thứ tự dòng có thể không được để trống
CẬP NHẬT
tuy nhiên tôi có thể làm thành công sau nhưng rõ ràng chỉ hoàn thành việc tạo ra một:
after(:build) do |order, evaluator|
order.order_lines << FactoryGirl.build(:order_line, order: order)
end
Giả thuyết - Tôi có thể xem nơi create_list
có thể cố gắng để lưu các OrderLine
đó sẽ gây ra một lỗi vì bố mẹ chưa được lưu - nhưng tôi không biết nếu nó vẫn trả về một đối tượng OrderLine chỉ ở trạng thái không hợp lệ và do đó bộ sưu tập order_lines trên đối tượng thứ tự vẫn không được để trống.
Hãy thử sử dụng sau (: xây dựng) thay vì trước (: tạo) –
cập nhật các vấn đề với thông tin mới - Tôi đã thử sau (: xây dựng) cũng như sử dụng build_list thay vì create_list. Thật không may, cách duy nhất nó sẽ hoạt động nếu xác nhận cho order_lines trên mô hình Order. – pghtech
Tôi đang đối mặt với cùng một vấn đề –