Rails嵌套表单属性唯一性验证

时间:2014-07-29 13:32:32

标签: validation ruby-on-rails-4 nested-forms

我有3个嵌套模型

    • 公司
      • 学生

我有一个名为' student_number'在学生模型中。我想让它相对于课程(第一个父母)而言是独一无二的。每个单一课程不允许使用重复的student_numbers。

我写了一个 -

验证:student_number,presence:true,数字性:{only_integer:true},唯一性:{scope :: company_id}

但它仅适用于公司(第二家长),如果同时添加2名学生,此验证也无效。

请帮帮我。

1 个答案:

答案 0 :(得分:0)

#app/models/student.rb

...

validates :student_number, presence: true, numericality: { only_integer: true }, uniqueness: { scope: :course_id }


def course_id
  company.course.id
end

当然,这将对每个课程进行查找。因此,在大型系统上不会表现得非常好。

您可以重新组织数据库结构,以便学生直接参加课程,如果这更有意义,公司作为不同的父母。或者,如果事情变慢,你可以在学生表上放置课程id的缓存。

或者你可以写一个自定义验证器,如果你可以使它更高性能:

http://guides.rubyonrails.org/active_record_validations.html#custom-methods