1

我有一个想法来验证 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 的唯一性?

(PS 我不确定“校验和”是否正确。)

4

1 回答 1

0

基于以下几点:

  1. 你有一个Exam模型和一个Problem模型
  2. 每个Exam has_many Problems
  3. 每个问题必须是唯一的Exam

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

因此,例如,如果有一个名为 的属性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
于 2013-08-22T22:50:28.553 回答