Ошибки в немодельных полях в рельсах

Как лучше всего сообщать об ошибках в полях формы, не связанных с конкретной моделью в Rails? В качестве примера у меня есть форма для пакетного создания учетных записей пользователей со случайными пользователями/паролями. Он принимает в качестве входных данных количество создаваемых пользователей, информацию о том, какими атрибутами должны обладать все пользователи, и информацию о пакете, который хранится в модели user_batches, связанной с созданными пользователями.

В идеале должен быть какой-то errors_on способ перечислить ошибки, поступающие из поля количества, которое не связано с моделью, поля информации о пользователе, связанные с создаваемыми записями пользователя, и модель user_batches с минимальным кодом.

Это также относится к формам поиска и тому подобному, которые не проходят проверку AR. Есть идеи?


person Andrew Cholakian    schedule 02.03.2009    source источник


Ответы (1)


Вы можете добавить свои собственные ошибки вручную в объект модели следующим образом.

@user_batch.errors.add_to_base("Foo")
person jdl    schedule 02.03.2009
comment
Спасибо! Но что бы вы сделали в случае, когда нет конкретного экземпляра, к которому можно было бы его добавить. Как для формы поиска с несколькими вариантами, где из-за недопустимого запроса не было возвращено ни одного объекта? Или для отчета, который показывает только результат сложного поиска SQL, возвращающего не объект, а только необработанные данные? - person Andrew Cholakian; 02.03.2009
comment
Один из подходов состоит в том, чтобы сохранить простой массив ошибок, которые вы хотите отобразить, которые вы создадите в ходе действия вашего контроллера. Затем преобразуйте это во флэш-сообщение прямо перед рендерингом. - person jdl; 02.03.2009
comment
Спасибо, JDL, это то, чего я надеялся избежать, но похоже, что пока я этим и займусь. Мне нравится, как error_on так явно привязан к форме, в то время как флеш-сообщение больше привязано к странице. - person Andrew Cholakian; 02.03.2009
comment
Что ж, вы можете избежать универсального массива с помощью плагина ActiveRecord::BaseWithoutTable. Настройка требует больше усилий, но зато вы получаете объект, который в основном ведет себя как обычный объект ActiveRecord. agilewebdevelopment.com/plugins/activerecord_base_without_table - person jdl; 02.03.2009