Проверки, основанные на связях, создаваемых в Rails - PullRequest
0 голосов
/ 14 декабря 2011

A Course имеет много Lessons, и они выбираются пользователем с помощью виджета JS drag-n-drop, который работает нормально.

Вот соответствующая часть параметров, когда я выбираю два урока:

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 ]

2 голосов
/ 14 декабря 2011

похоже, вам здесь не нужна пользовательская проверка, рассмотрите возможность использования этой:

validates :lessons, :presence => true

или

validates :lessons, :presence => {:on => :create}
0 голосов
/ 16 декабря 2011

Вы не можете получить доступ к 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

Я все еще открыт для лучшего способа сделать это.

...