Отображение полей с ошибками для вложенных форм в Rails 3.2 + SimpleForm - PullRequest
9 голосов
/ 02 апреля 2012

У меня есть модель Flight, вложенная в модель FlightLog.FlightLog может содержать много рейсов.

Я использую SimpleForm с установкой начальной загрузки, которая позволяет окружать элементы формы ошибками с классом ошибок при сбое проверки.

Проблема в том, что даже если проверки для вложенной модели запущены, поля с ошибками внутри simple_fields_for не помечены , поэтому невозможно определить, какой атрибут недопустим.

Изучив хэш ошибок при вызове действия создания, я вижу, что он правильно заполнен ошибками на верхнем уровне и ошибками вложенных ресурсов внутри каждого ресурса.

Как я могу изменитьповедение simple_form для добавления класса ошибок в контрольную группу каждой вложенной модели для соответствия поведению родителя?

Заранее спасибо.

enter image description here

Ответы [ 2 ]

20 голосов
/ 11 апреля 2012

Если вы используете simple_form с начальной загрузкой, это работает - вам просто нужно правильно настроить несколько элементов:

1 - использовать оболочки начальной загрузки simple_form (из simple_form 2.0) - вы можете найти их врепозиторий github в config/initializers/simple_form.rb (https://github.com/rafaelfranca/simple_form-bootstrap)

2 - чтобы во вложенных формах отображались ошибки, вы должны быть уверены, что предоставили объект. f.simple_fields_for :nested_model не будет работать, вам нужно использовать f.simple_fields_for parent_model.nested_model или f.simple_fields_for :nested_model, parent_model.nested_model, чтобы форма могла получить необходимый объект.

Если вы все еще ничего не получаете, убедитесь, что форма действительно получает объект, о котором вы думаете, с ошибками, путем выводаданные об ошибках вашего вложенного объекта: parent_model.nested_model.errors.full_messages.to_sentence

2 голосов
/ 07 сентября 2012

Я использовал собственные средства доступа вместо полей _id, поэтому они не получали уведомления об ошибках. Я наконец решил использовать f.error: attr_name под каждым аксессором и вручную изменить стиль с помощью JS

...