Eri*_*tch 19 ruby-on-rails factory-bot
我有一个标准的has_many
关系(预订有很多订单),验证如果没有至少一个订单,预订不会得到保存.我正试图用FactoryGirl工厂复制这个,但验证阻止我这样做.
class Booking < ActiveRecord::Base
has_many :orders
validates :orders, presence: true
end
class Order < ActiveRecord::Base
belongs_to :booking
end
Run Code Online (Sandbox Code Playgroud)
以下是FactoryGirl的GitHub维基页面中每个型号的FactoyGirl工厂规格.
FactoryGirl.define do
factory :booking do
factory :booking_with_orders do
ignore do
orders_count 1
end
before(:create) do |booking, evaluator|
FactoryGirl.create_list(:order, evaluator.orders_count, booking: booking)
end
end
end
factory :order do
booking
end
end
Run Code Online (Sandbox Code Playgroud)
当我尝试FactoryGirl.create(:booking_with_orders)
从我的规范运行时,我得到:
Failure/Error: @booking = FactoryGirl.create(:booking_with_orders)
ActiveRecord::RecordInvalid:
Validation failed: Orders can't be blank
Run Code Online (Sandbox Code Playgroud)
似乎验证的检查正在运行,甚至在before(:create) [...]
此之前理论上会创建预订的订单.
这篇文章建议不要has_many
为你的工厂添加关系,但如果有一个很好的方法,我想解决这个问题.
提前致谢.
jas*_*ssa 33
笏?不可能?一点也不.
只需将您的代码更改为以下内容:
after :build do |booking, evaluator|
booking.orders << FactoryGirl.build_list(:order, evaluator.orders_count, booking: nil)
end
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4866 次 |
最近记录: |