在我的部署过程中,我正在运行种子文件。我希望这是幂等的,所以我可以多次运行它而没有任何问题。
目前,如果多次运行,我会收到PG主键错误。
我的种子模式如下:
user = User.create(.....)
user.save!
foo = Foo.create(....)
foo.save!
我怎样才能使这个幂等人?
这是最好的方式吗?
if( user.exists?(some_column: some_value) )
else
# do insert here
end
答案 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