2016-07-11 13 views
3

_errors.html.hamlという部分があり、私のアプリケーションでフォームエラーを表示しています。部分的な内部コード:Rails 4は部分的にローカルでレンダリングされます

.errors 
    %ul 
    - errors.full_messages.each do |message| 
     %li= message 

私はviews/sharedディレクトリ内のエラー部分が存在

= render 'shared/errors', locals: { errors: @project.errors } if @project.errors.any? 

としてプロジェクト/ new.html.hamlから部分をレンダリングしています。

エラーを部分的にレンダリングしようとするとエラーが発生します。

undefined local variable or method errors' for #<#<Class:0x0055895405bbc0> :0x00558951a80fe0>

私は

= render 'shared/errors', errors: @project.errors if @project.errors.any? 

にレンダリングラインを変更した場合、それは動作します。この場合、なぜlocalsを使用しないのですか?

+0

私は[質問](http://stackoverflow.com/questions/38129112/rails-undefined-local-variable-or-method-page/38142541#38142541)にも同じ問題があります。 [レンダリング](https://github.com/rails/rails/blob/8cb8ce98d903929342e2ca3a54a07ab5196baf93/actionview/lib/action_view/helpers/rendering_helper.rb#L26)のソースを確認して、動作しない理由を確認できます。 – Thanh

答えて

2

_errors.html.hamlでジャストカンの答えに追加します。私はすべてのバリエーションを実験しました。 Railsの部分レンダリングにlocalsという用語を使用する場合は、キーワードpartialを指定する必要があります。

明示だから、これは

= render partial: 'shared/errors', locals: { errors: @project.errors } if @project.errors.any? 

暗黙を働くだろうそれとも、部分的にレンダリングするためのハッシュキーを指定した場合、短い形式は、結論でそう

= render 'shared/errors', errors: @project.errors if @project.errors.any? 

になり、そのすべてのキーは明示的に指定する必要があります。そうでなければ、ハッシュキーを指定せずに、その位置に基づいて暗黙的にレールを把握させる必要があります。

0

あなたの問題はlocalsの条件を作成していると思います。

あなたはこれをしようとすることができます:

- if @project.errors.any? 
    = render partial: 'shared/errors', locals: { errors: @project.errors } 

.errors 
    %ul 
    - test_errors.full_messages.each do |message| 
     %li= message 
関連する問題