gpt4 book ai didi

ruby-on-rails - FactoryGirl has_many与验证关联

转载 作者:行者123 更新时间:2023-12-03 12:34:13 24 4
gpt4 key购买 nike

我有一个标准的has_many关系(预订有很多订单),并确认没有至少一个订单不会保存预订。我正在尝试使用FactoryGirl工厂复制此文件,但是验证阻止我这样做。

class Booking < ActiveRecord::Base
has_many :orders
validates :orders, presence: true
end

class Order < ActiveRecord::Base
belongs_to :booking
end


这是我对每种模型的FactoyGirl工厂规格,其后是FactoryGirl的GitHub Wiki页面。

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


当我尝试从规范运行 FactoryGirl.create(:booking_with_orders)时,我得到:

Failure/Error: @booking = FactoryGirl.create(:booking_with_orders)
ActiveRecord::RecordInvalid:
Validation failed: Orders can't be blank


看来验证检查甚至在 before(:create) [...]之前就在运行,这在理论上将为预订创建订单。

This post建议不要向您的工厂添加 has_many关系,但是如果有很好的方法,我还是想解决此问题。

提前致谢。

最佳答案

?不可能?一点也不。

只需将代码更改为如下所示:

after :build do |booking, evaluator|
booking.orders << FactoryGirl.build_list(:order, evaluator.orders_count, booking: nil)
end

关于ruby-on-rails - FactoryGirl has_many与验证关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13851382/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com