2009-08-06 5 views
10

지역 :이 같은 다른 부분에 보낼 때 일부 주민들이 지속되지 레일 자신의 내가 지금 같은 부분을 렌더링

<%= render :partial => 'widgets/some_partial, :locals => {:foo => 'bar'} %> 

을 그래서 두 개 더 파셜과 같이 렌더링 _some_partial.html.erb 내부 :

<% #foo.nil? #=> false %> 
<%= render :partial => 'widgets/another_partial', :locals => {:foo => foo} %> 
`<%= render :partial => 'widgets/another_partial_again', :locals => {:foo => foo} %>` 

foo 지역 변수는 some_partial.html.erb에, 심지어 another_partial_again.html.erb에조차 잘 표현됩니다. 그러나 foo 변수는 렌더 호출에서 명시 적으로 전달하더라도 another_partial.html.erb에서 액세스 할 수 없습니다.

여기 무슨 일입니까?

도움 주셔서 감사합니다.

+0

"액세스 할 수 없음"이란 무엇을 의미합니까? '정의되지 않은 지역 변수 또는 메소드'를 던지거나'nil'입니까? 이 하위 부분들에'foo'를 사용하는 코드를 보여줄 수 있습니까? – hsribei

+0

코드가 정의되지 않은 로컬 변수 – user94154

+0

을 던졌습니다. <%= foo %> – user94154

답변

3

해결. 내가 올바른 로컬 변수를 보내지 않고도 컨트롤러에서 동일한 부분을 렌더링하고있었습니다. 어쨌든 고마워!!!

+1

실제로 동일한 문제가 있었고 솔루션이 정확히 동일했습니다. 실수를봤을 때 알아 냈습니다. P –

+0

나도 그래! 하아. "myvar"를 "- if myvar"& myvar "로 변경했습니다. – Chris

+0

여기에서 AJAX에서 부분을 전달했지만 심볼을 변경하는 것을 잊었습니다. – yoshyosh

41

:locals으로 부분을 렌더링 할 때 나는 undefined local variable or method 오류가 발생했습니다.

그러나 다른 문제가 발생하여 다른 사람에게 도움이 될 경우 솔루션을 공유 할 수 있다고 생각했습니다. (이 페이지는 결국 내가이 오류로봤을 때 가장 처음이었습니다)

render으로 전화 할 때 기본적으로 :partial => 'path/to/partial'을 사용해야합니다.

e.e.

<%= render 'widgets/some_partial', :locals => {:foo => 'bar'} %> 

쉬운을 그리워하는 나 같은 레일/루비 초보자를위한 :

<%= render :partial => 'widgets/some_partial', :locals => {:foo => 'bar'} %> 

내가하고 있던 좋아하지.

+0

+1 생명의 은인, 감사합니다!! –

+6

+1 @ asgeo1 이상하게도': partial'을 사용하면 효과가 있지만, 실제로는 효과가 있습니다! – iwasrobbed

+0

와우! 고마워 ... 루비를 배우는 중이다. 나는이 오류에 대해 완전히 혼란스러워했다. 나는 더 많은 포인트를 mod-up 할 수 있었으면 좋겠다. – Nabheet

0

같은 문제에 직면 한이 아주 오래된 질문에 부딪 혔습니다. 레일 4+ 올바른 방법으로 컬렉션을 사용하거나 레이아웃하지 않으면 것은 밝혀졌다 :

# Instead of <%= render partial: "account", locals: { account: @buyer } %> 
<%= render "account", account: @buyer %> 

here을 문서화한다.