工厂女孩在安全回调之前

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工厂女孩在安全回调之前相关的知识,希望对你有一定的参考价值。

我有一个非常具体的用例。我需要每次保存工厂实例“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

并且有不同的方法来持久化工厂实例:

  1. FactoryGirl.create :deleted_user
  2. FactoryGirl.create_list(:deleted_user)
  3. FactoryGirl.build(:deleted_user).save
  4. FactoryGirl.build(:deleted_user).save!
  5. FactoryGirl.build_list(:deleted_user, 2).map(&:save)
  6. FactoryGirl.build_list(:deleted_user, 2).map(&:save!)

正如我看到Factory Girl没有之前的保存回调但只有before(:create)on_creation,但它们仅针对上述调用的1, 2触发。

你知道如何优雅地使用自定义before(:save)回调吗?

注意:我的FactoryGirl是4.5.0

答案

您也可以将您的逻辑包含在after(:build)中,因为在您调用.save之前它不会触及数据库。

以上是关于工厂女孩在安全回调之前的主要内容,如果未能解决你的问题,请参考以下文章

PHP面向对象之选择工厂和更新工厂

如何使用工厂女孩创建唯一的字符串(没有数字)?

绕过我的模型验证的工厂女孩​​创建

Facebook状态回调不适用于片段

C#通过工厂模式,我把一大堆if干掉了

CPNtools协议建模安全分析---实例变迁标记