验证唯一性:{scope:[:foobar]}无效

时间:2014-05-05 13:35:58

标签: ruby-on-rails ruby validation sidekiq

我有一个模型,它具有唯一性验证,如:

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个或更多工作人员正在执行相同的代码并保存记录。有没有办法在这个记录上放置一个锁或什么东西,这样我就不会重复了?

1 个答案:

答案 0 :(得分:7)

Rails不能保证唯一性。您需要在数据库中的[curriculum_sequence_id, student_id]上的表上创建唯一索引。