在Rails 5应用程序中,我创建项目并增加其位置:
class ListItem < ActiveRecord::Base
belongs_to :list
before_validation :ensure_position
private
def ensure_position
self.position ||= self.class.where(list_id: list_id).maximum(:position).to_i + 1
end
end
负责重复违规的索引是:
t.index ["list_id", "position"]
我在:position列上遇到PG重复键违规。每当同时触发多个create时,最大函数会为多个记录返回相同的位置。
我是新手,可以在轨道上安装线程中的ruby和postgres锁定。有没有办法在列表项记录的保存操作中锁定或创建互斥锁,以便位置安全递增?