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

Итак, у меня есть элемент ввода, подобный этому. Элемент обертывания - это, знаете ли, визуальная вещь.

<div class="input-wrap">
  <input class="blah-blah" />
</div>

Когда <input> содержит ошибку, это будет следующим образом:

<div class="input-wrap">
  <div class="field-with-errors">
    <input class="blah-blah" />
  </div>
</div>

Но я хочу сделать следующее:

<div class="input-wrap field-with-errors">
  <input class="blah-blah" />
</div>

Я нашел эту страницу, это очень близко к моему вопросу

Рельсы 3: с полем с ошибками " обертка изменяет внешний вид страницы. Как этого избежать?

Теперь я знаю, что могу бросить

config.action_view.field_error_proc = Proc.new { |html_tag, instance| 
   "#{html_tag}".html_safe
}

чтобы избежать обертывания тега вокруг тега <input> с ошибкой. Но то, что я действительно хочу сделать, снова добавляет класс "field-with-errors" в прямой родительский элемент тега <input>. Я могу это сделать? Поддерживает ли ActionView древовидную структуру узлов DOM?

Ответ 1

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

if @instance.errors.any?
  <div class="field with errors">
  @instance.errors.full_messages.each do |msg|
    <p><%= msg %></p>
  end
end

Если вам это очень нравится, полезно вытащить его в помощник и передать переменную экземпляра в качестве параметра.