2

タイトルなど、いくつかのフィールドで検証されたパブリケーションモデルがあります。

煩わしいと感じたエラーメッセージを削除し、入力がfield_with_error divで囲まれている場合に備えて、適切なCSSを設定して、ユーザーがどのフィールドが検証されなかったかを認識できるようにしました。

問題は、本番環境にデプロイしたときに検証が実行されたままである(つまり、ユーザーがフォームに戻される)が、入力がエラーdivで囲まれていないことです。

アプリを本番モードでローカルに実行してみましたが、config / environment/production.rbファイルでconfig.cache_classesをtrueに設定するとアプリが実行され始めることがわかりました。

また、@ publication.errorsをコントローラーに記録すると、エラーが発生します。

何か案が ?

4

3 に答える 3

3

Rails 4.0.1プロジェクトで、初期化子を追加しました。

config/initializers/field_with_errors.rb

これらの行で

ActionView::Base.class_eval do
  @@field_error_proc = Proc.new{ |html_tag, instance| "<div class=\"field_with_errors\">#{html_tag}</div>".html_safe }
end
于 2014-02-27T20:27:59.397 に答える
2

Rails自体を掘り下げた後、actionpack / lib / action_view / helpers/active_model_helper.rbでそれを見つけました。

Base.field_error_proc.call(html_tag, self)

エラーdivでラップせずにhtml_tagを返します。

さらに進んで、actionpack / lib / action_view / base.rbで、

@@field_error_proc = Proc.new{ |html_tag, instance| "<div class=\"field_with_errors\">#{html_tag}</div>".html_safe }

リセットされたか、設定されていません。

回避策として、

ActionView::Base.field_error_proc = Proc.new{ |html_tag, instance| "<div class=\"field_with_errors\">#{html_tag}</div>".html_safe }

コントローラーの上部にある問題は問題を解決します。レールがロードされた後に解釈されるためだと思います。

問題は、アプリ内の他のすべてが正常に機能しているのに、最初にロードされなかった可能性があるということです。

于 2012-06-22T14:05:38.567 に答える
1

私の場合、それは宝石「カゼイン」のために起こっていました。この宝石がなければ、それはうまく機能していました。また、開発中は機能していましたが、本番環境では機能していませんでした。

field_error_procに設定したイニシャライザを無視していました。これは、私が推測する宝石によって上書きされたためです。

たとえば、https ://github.com/russellquinn/casein/blob/master/app/controllers/casein/casein_controller.rbを参照してください。

最後に、コントローラーをプロジェクトにコピーして、次の行を削除しました。

ActionView::Base.field_error_proc = proc { |input, instance| "#{input}".html_safe }

その後、イニシャライザは本番環境でも正常に機能しました。

于 2016-07-27T19:45:33.243 に答える