如何让我的种子文件成为幂等的?

时间:2017-02-15 14:41:22

标签: ruby-on-rails

在我的部署过程中,我正在运行种子文件。我希望这是幂等的,所以我可以多次运行它而没有任何问题。

目前,如果多次运行,我会收到PG主键错误。

我的种子模式如下:

user = User.create(.....)
user.save!

foo = Foo.create(....)
foo.save!

我怎样才能使这个幂等人?

这是最好的方式吗?

if( user.exists?(some_column: some_value) )
else
  # do insert here 
end 

2 个答案:

答案 0 :(得分:1)

我相信你可以使用first_or_create

User.where(email: "email@gmail.com").first_or_create do |user|
  user.name = "John"
end

如果User存在email = "email@gmail.com",则只会创建User,否则会返回现有Unique Key Violation的实例。

这样您可以避免使用{{1}}

答案 1 :(得分:1)

您可以尝试:

unless user.find_by(some_column: some_value)
    user.save!
end