Переопределение ActionView::Base.field_error_proc в RefineryCMS

Я пытаюсь, чтобы ошибки проверки на стороне клиента отображались встроенными, используя гем client_side_validations (https://github.com/bcardarella/client_side_validations) в моем приложении RefineryCMS.

Когда я выхожу из недопустимого поля, оно, как и ожидалось, заворачивается в тег span.fieldWithErrors, поэтому я знаю, что проверки javascript работают. Однако я не могу отображать сообщения об ошибках даже после переопределения ActionView::Base.field_error_proc.

У меня такое ощущение, что мой инициализатор впоследствии переопределяется нефтеперерабатывающим заводом (?):

В config/initializers/client_side_validations.rb:

# Uncomment the following block if you want each input field to have the validation messages attached.
ActionView::Base.field_error_proc = Proc.new do |html_tag, instance|
  unless html_tag =~ /^<label/
    %{<div class="field_with_errors">#{html_tag}<label for="#{instance.send(:tag_id)}" class="message">#{instance.error_message.first}</label></div>}.html_safe
  else
    %{<div class="field_with_errors">#{html_tag}</div>}.html_safe
  end
end

Я также попытался установить field_error_proc из config/application.rb, используя что-то вроде строк

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

Ни один из них, похоже, не влияет на отображение недопустимых полей. Есть идеи??


person dearlbry    schedule 05.11.2011    source источник
comment
NB: Ваш код может быть немного более читабельным, если вы используете помощника вместо того, чтобы писать свои <div>: ActionController::Base.helpers.content_tag(:div, html_tag, :class => "fieldWithErrors")   -  person JellicleCat    schedule 13.06.2012


Ответы (1)


Оказывается, RefineryCMS действительно переопределяет field_error_proc:

https://github.com/refinery/refinerycms/issues/961

Это сработало для меня:

# Uncomment the following block if you want each input field to have the validation messages attached.
Rails::Application.refinery.after_inclusion do
  ActionView::Base.field_error_proc = Proc.new do |html_tag, instance|
    unless html_tag =~ /^<label/
      %{<div class="field_with_errors">#{html_tag}<label for="#{instance.send(:tag_id)}" class="message">#{instance.error_message.first}</label></div>}.html_safe
    else
      %{<div class="field_with_errors">#{html_tag}</div>}.html_safe
    end
  end
end
person dearlbry    schedule 05.11.2011
comment
Я столкнулся с той же проблемой, и гем rails_admin преграждает мне путь, я собираюсь проверить, работает ли этот метод. - person linjunhalida; 17.02.2012