【发布时间】:2014-10-11 21:35:11
【问题描述】:
我有以下代码:
rating = user.recipe_ratings.where(:recipe_id => recipe.id).where(:delivery_id => delivery.id).first_or_create
但不知何故,我们偶尔会从中得到PG::Error: ERROR: duplicate key value violates unique constraint 错误。我想不出任何应该发生的原因,因为first_or_create 的全部目的是防止这些。
这只是一个疯狂的比赛条件吗?如果没有一系列令人抓狂的begin...rescue 块,我该如何解决这个问题?
【问题讨论】:
-
完全不要使用
first_or_create,手动操作。即使您自己的版本在异常处理包装器中执行天真的 SELECT/INSERT 也会比 AR 的first_or_create更好。
标签: ruby-on-rails-3 postgresql activerecord race-condition select-insert