我有一个非常具体的用例。在保存工厂实例“deleted_user”之前,我每次都需要在“users”表中为其分配ID
,以便“恢复”工作。
class DeletedUser < ActiveRecord::Base
def restore
User.create!(attributes) # ID here is included and is important to be. We want a user with the same ID that it was before deleting!
end
end
FactoryGirl.register :deleted_user do
# need to plug before save and assign ID that never will be used for user ID.
end
并且有不同的方法可以持久保存工厂实例:
FactoryGirl.create :deleted_user
FactoryGirl.create_list(:deleted_user)
FactoryGirl.build(:deleted_user).save
FactoryGirl.build(:deleted_user).save!
FactoryGirl.build_list(:deleted_user, 2).map(&:save)
FactoryGirl.build_list(:deleted_user, 2).map(&:save!)
正如我所看到的,Factory Girl之前没有保存回调但只有before(:create)
和on_creation
,但它们仅针对上述调用的1, 2
触发。
您是否知道如何优雅地使用自定义before(:save)
回调?
注意:我的FactoryGirl是4.5.0
答案 0 :(得分:0)
您也可以将您的逻辑包含在after(:build)
中,因为在您致电.save
之前,它不会触及数据库。