Проверка: включение в рельсы на основе значения атрибута родительской модели - PullRequest
3 голосов
/ 08 сентября 2010

У меня есть две модели Project и 'Task', где проект has_many задачи и задачи принадлежат проекту

Теперь в моей модели Task я выполняю проверку поля с использованием атрибутов в проекте

validates :effort, :inclusion => 1..(project.effort)

Это приводит к ошибке method_missing: undefined method project

Вопрос в том, как я могу проверить дочерний атрибут (Task.effort) на основе значения атрибута родителя (Project.effort) в Rails 3

Ответы [ 2 ]

2 голосов
/ 01 октября 2010

Я закончил проверку в обратном вызове и выдал исключение, если оно недопустимо.Единственным недостатком является то, что контроллер должен перехватить исключение.

ОБНОВЛЕНИЕ

Лучшее решение на основе пользовательских валидаторов Rails 3.0: https://web.archive.org/web/20110928154550/http://zadasnotes.blogspot.com/2010/12/rails-3-validation-using-parent-models.html

0 голосов
/ 08 сентября 2010

Когда это интерпретируется, класс не знает, что такое объект проекта. И такие проверки не могут быть добавлены динамически. Вы можете сделать следующее

   def valiate
     unless (1..(project.effort)).member? effort
       errors.add :effort, "must be within 1 to #{project.effort}"
     end
   end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...