我有一个Student
和Student_section
型号。 Student
表格有student_id and roll_no
,Student_section
有student_id, standard_id and section_id
。
Roll_no
在standard
和section
中应该是唯一的。
在student.rb
文件中,我无法为standard and section
模型中的Student_section
设置唯一的roll_no自定义验证。
我在实施方面遇到了麻烦,有人可以帮忙吗?
答案 0 :(得分:0)
如果您使用的是RAILS 4,您可以像这样定义模型的关系,如果为true,则会从集合中省略duplcates。
has_many :student_sections, -> { uniq }, through: :students
如果您使用的是RAILS< 4版,试试这个
has_many :student_sections, :through => :students, :uniq => true
答案 1 :(得分:0)
我赞同您使用自定义验证器(这将允许您通过其错误消息以一致和详细的方式解释必须满足的条件)。你真正需要做的就是做两个不同的查询并根据结果返回:
def roll_no_must_be_unique
# Boolean indicating if roll_no is unique within the Student table
unique_in_student = Student.where(roll_no: roll_no).count == 0
# Boolean indicating if roll_no is unique within the Standard table
unique_in_standard = Standard.where(roll_no: roll_no).count == 0
# Adds the error if either query returned non-unique
errors.add(:roll_no, 'Error Message Here') unless unique_in_student && unique_in_standard
end
如果您觉得有意,可以在每个单独的查询后添加一条错误消息,指出它在哪个表中失败。这真的是一个偏好的问题。