Ruby on rails 围绕已经存在的值编写工厂
当我想测试一个想法时,我一直在使用Factory Girl在开发中创建一些基本对象,我经常遇到这样的情况:Ruby on rails 围绕已经存在的值编写工厂,ruby-on-rails,factory-bot,Ruby On Rails,Factory Bot,当我想测试一个想法时,我一直在使用Factory Girl在开发中创建一些基本对象,我经常遇到这样的情况: ActiveRecord::RecordInvalid: Validation failed: Email has already been taken, Login has already been taken 如果我曾经在开发模式下运行过一次FactoryGirl.create:user,并将该用户留在数据库中,那么如果在关闭控制台后再次尝试运行该命令,我将不得不运行该命令两次。基本
ActiveRecord::RecordInvalid: Validation failed: Email has already been taken, Login has already been taken
如果我曾经在开发模式下运行过一次FactoryGirl.create:user
,并将该用户留在数据库中,那么如果在关闭控制台后再次尝试运行该命令,我将不得不运行该命令两次。基本上,序列在控制台实例之间被重置
有没有人想出一种方法来编写工厂,使它们每次都能产生独特的结果?我知道我可以使用随机生成器从一个大的域中选择一个值,从而最大限度地减少冲突的可能性。不过,如果可以的话,我想找到一个更干净的方法。您可以为此编写一个序列
Factory.sequence(:email) do |n|
"tester#{n}@example.com"
end
Factory.define :user do |f|
f.name "Tester"
f.email {Factory.next :email}
f.password "tester"
end
资料来源:
编辑
重新阅读后,您似乎正在尝试以开发模式创建数据
您应该为此使用seeds.rb文件并维护一个计数器
index = User.count || 1
User.create([
{:email => "user#{index++}@example.com",
:password => "password"},
{:email => "user#{index++}@example.com",
:password => "password"}
])
是的,我已经在用序列了。我想用某种方法来持久化序列——但在启动时将其设置为最高主键也应该有效(使用对象计数时,删除可能会导致冲突)。我的用例是在控制台中创建对象,在编码之前测试一个想法。为此,种子设定仍然感觉有点笨拙,因为我必须为我在将来的代码中预见到的每个模型创建种子定义,然后运行一个rake任务并查找在控制台中创建的对象。