Переопределение ActionView :: Base.field_error_proc в RefineryCMS - PullRequest
2 голосов
/ 06 ноября 2011

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

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

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

В 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... }  

Похоже, что ни один из них не влияет на отображение недопустимых полей. Любые идеи ??

1 Ответ

3 голосов
/ 06 ноября 2011

Оказывается, 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
...