我有一个想法来验证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
我们要解决的边缘案例是:
鉴于明显的问题3x4
,sqrt(4)
,5+5
等,我们不希望所有问题都在多个考试中。
有没有人对这种方法有所了解?有没有更好的方法来验证has_many的唯一性?
(P.S。我不确定“校验和”是否是正确的术语。)
答案 0 :(得分:0)
基于以下内容:
Exam
型号和Problem
型号Exam
has_many
Problem
s Exam
我认为对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