使用字符串“checksum”验证has_many关联的唯一性

时间:2013-08-22 21:53:49

标签: ruby-on-rails ruby-on-rails-3

我有一个想法来验证has_many关联的唯一性:如果我们根据相关记录的ID生成一个字符串怎么办?

例如:

class Exam
  has_many :problems   #problems are unique and can be in multiple exams

  validate :checksum, uniqueness: true   #string

  before_validate :check
  def check
    checksum = problems.map {|p| p.id}.join
  end
end

我们要解决的边缘案例是: 鉴于明显的问题3x4sqrt(4)5+5等,我们不希望所有问题都在多个考试中。

有没有人对这种方法有所了解?有没有更好的方法来验证has_many的唯一性?

(P.S。我不确定“校验和”是否是正确的术语。)

1 个答案:

答案 0 :(得分:0)

基于以下内容:

  1. 您有Exam型号和Problem型号
  2. 每个Exam has_many Problem s
  3. 每个问题必须是Exam
  4. 唯一的问题

    我认为对uniqueness的属性进行Problem验证更有意义,但将验证范围限定在Exam,以便多个Exams可以拥有相同的Problem s,但每个Exam都有一组唯一的Problem s。

    例如,如果存在名为value的属性,我们会对其进行唯一性验证,并将其范围限定为exam_id

    class Exam < ActiveRecord::Base
      has_many :problems
    end
    
    class Problem < ActiveRecord::Base
      belongs_to :exam
    
      validates :value, :uniqueness => { :scope => :exam_id }
    end