我有一个模型,它具有唯一性验证,如:
class CurriculumRequirement < ActiveRecord::Base
belongs_to :student
belongs_to :curriculum_sequence
validates :student_id,
uniqueness: { scope: [:curriculum_sequence_id] }
end
问题是,尽管有这样的验证,但不知何故,重复的记录被插入到我的数据库中。添加这些记录的位置发生在sidekiq后台工作者中:
student.curriculum_requirements.where(curriculum_sequence: sequence).first_or_create
我认为发生的事情是2个或更多工作人员正在执行相同的代码并保存记录。有没有办法在这个记录上放置一个锁或什么东西,这样我就不会重复了?
答案 0 :(得分:7)
Rails不能保证唯一性。您需要在数据库中的[curriculum_sequence_id, student_id]
上的表上创建唯一索引。