2016-07-11 6 views
3

내 응용 프로그램에서 양식 오류를 표시하는 부분 _errors.html.haml이 있습니다. 부분적인 내부 코드 :레일 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의 부분을 렌더링하고있다.

하지만 부분 오류를 렌더링하려고하면 오류가 발생합니다. 내가

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

로 렌더링 라인을 변경하는 경우

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

. 이 경우에 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에서 그냥 칸의 대답에 추가 할 수 있습니다. 나는 모든 변화를 실험했다. 레일 부분 렌더링에 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