【发布时间】:2017-09-29 17:17:06
【问题描述】:
所以我的模型对象上有一个方法,当行中的二进制字段从 null 更新为 true 时,它会创建一个唯一的序列号。它的实现是这样的:
class AnswerHeader < ApplicationRecord
before_save :update_survey_complete_sequence, if: :survey_complete_changed?
def update_survey_complete_sequence
maxval =AnswerHeader.maximum('survey_complete_sequence')
self.survey_complete_sequence=maxval+1
end
end
我的问题是我需要锁定什么,以便同时更新两行不会导致两行具有相同的survey_complete_sequence?
如果可以锁定单行而不是整个表,那就太好了,因为这是用户经常访问的表。
【问题讨论】:
-
有什么原因不能创建 Postgres 序列并让数据库处理它?
-
我可以猜到,但我不喜欢将应用程序逻辑分散到各处(即一些在 rails 应用程序中,一些在数据库本身中,等等)。似乎是一个令人头疼的维护问题。
-
对任何有我不需要的答案的人来说,我真的需要一个“可靠的来源”,我只需要一个有效的解决方案。
标签: ruby-on-rails rails-activerecord rails-models