工厂女孩在安全回调之前

问题描述 投票:0回答:1

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

ruby rspec factory-bot
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.