我有一个带有active
字段的ActiveRecord模型。我有一些验证,如果创建时active = true
,肯定会失败。我在出厂时默认将active
设置为false,但我想加倍努力,并禁止更改它,最好带有有意义的错误消息。我该怎么办?
有效的用例将如下所示:
my_model = create(:my_model) # my_model.active == false
# do some other setup
my_model.update!(active: true)
我想实现的是这个
create(:my_model, active: true)
# => raise FactoryOptionsNotAllowed: cannot be active upon creation
[不幸的是,after(:build)
不像it runs after associations are saved防弹。因此,在保存关联时发生错误时,它将不会达到after(:build)
。
您可以在工厂中使用after(:build)
:
factory :my_model do
active { true }
after(:build) do |model|
unless model.active
raise FactoryBot::InvalidFactoryError, 'active cannot be false'
end
end
end
您可能想要定义自己的异常类型,而不是使用FactoryBot InvalidFactoryError
。