Есть ли плагин / гем, который позволяет вам наследовать ошибки от дочерней модели в рельсах? - PullRequest
0 голосов
/ 02 марта 2011

Давайте предположим, что вы используете Rails и имеете форму с вложенными моделями; например, форма с проектом и задачами для проекта.

Затем предположим, что каждая задача должна иметь имя, однако пользователь не вводит имя. Когда пользователь отправляет форму, а вы используете

project.update_attributes(params[:project]) 
=> raises error

Но (как видно выше) это вызывает ошибку. Существуют ли какие-либо инструменты, которые позволят ошибкам в задаче просачиваться до уровня проекта и НЕ вызывают ошибку? Такой инструмент значительно уменьшил бы дублирование, и он должен был бы предотвратить сохранение подзадач как проекта, так и ДРУГИХ в одном и том же вызове update_attributes.

Кстати, проблема, которую я пытаюсь решить, заключается в том, что нет необходимости переписывать этот перколяционный код для примерно 30 моделей,

1 Ответ

1 голос
/ 02 марта 2011

Ошибки валидации из ассоциаций должны быть доступны в методе родителя #errors.Пример, если у «Foo» есть один «Бар»:

ruby-1.9.2-p136 :001 > s = Foo.new
 => #<Foo id: nil, created_at: nil, updated_at: nil, enabled: true, alpha: nil> 
ruby-1.9.2-p136 :002 > s.build_bar
 => #<Bar id: nil, created_at: nil, updated_at: nil, foo_id: nil, beta: nil> 
ruby-1.9.2-p136 :003 > s.save
 => false 
ruby-1.9.2-p136 :004 > s.errors.full_messages
 => ["Alpha is invalid", "Bar beta can't be blank"] 
ruby-1.9.2-p136 :005 > 

Более того, я не думаю, что ваши модели должны вызывать исключения, если есть ошибка проверки (если вы это подразумеваете под «повышение»ошибка").Вы должны просто увидеть, как #update_attributes возвращает false, а затем вы можете получить список ошибок

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...