依赖于在Rails中构建的关联的验证

时间:2011-12-14 07:20:23

标签: ruby-on-rails validation associations

Course有很多Lessons,用户可以使用JS拖放小部件来选择它们。

当我选择两节课时,这是参数的相关部分:

Parameters: {
  "course_lessons_attributes"=>[
    {"lesson_id"=>"43", "episode"=>"1"}, 
    {"lesson_id"=>"44", "episode"=>"2"}
  ]
}

我想对@course进行一些验证,这是一套新课程,包括课程数量,课程价格和其他内容的总和。这是一个示例:

课程模型

validate :contains_lessons
def contains_lessons
  errors[:course] << 'must have at least one lesson' unless lessons.any?
end

我的问题是课程和课程之间的关联尚未在课程保存之前建立起来,而且我想要他们进行验证(使用course.lessons)。

执行依赖关联的自定义验证的正确方法是什么?

感谢。

2 个答案:

答案 0 :(得分:2)

看起来你不需要在这里进行自定义验证,请考虑使用这个:

validates :lessons, :presence => true

validates :lessons, :presence => {:on => :create}

答案 1 :(得分:0)

您无法访问course.lessons,但course_lessons已存在,所以我最终在验证方法中执行了类似的操作,以便访问课程数组。

def custom validation
  val_lessons = Lesson.find(course_lessons.map(&:lesson_id))
  # ...
  # check some things about the associated lessons and add errors 
  # ...
end

我仍然愿意接受更好的方法。