2012-04-24 3 views
0

나는이 컨트롤러가 내가 컨트롤러에 대한 쿼리 객체를 인식하지 않습니다 에 이런 부분 :HAML의 파셜 부분은

= render :partial => "/influencers/disclosures/shared/list" 

을하지만,이 부분은 던져 예외 :

-if disclosures.empty? 
    .alert.alert-info 
    %p=(no_disclosures_message || (t "influencers.influencer_dashboard.disclosures.no_disclosures")) 
%table.table.influencer-disclosures 
    %tbody 
    -disclosures.each do |disclosure| 
     =render "influencers/disclosures/shared/row", :disclosure => disclosure 

말 그 :

undefined local variable or method `disclosures' for #<#<Class:0x133ca8a58>:0x133ca25e0> 

그러나 이것은 어떻게 될 수 있습니까? 나는 컨트롤러에있는 공개 오브젝트를 질의했다. 왜 이런 일이 일어나고 그것을 고치는 법입니까?

감사합니다.

답변

4

공개 앞에 @를 사용해야합니다. 이것은 컨트롤러가 뷰에 변수를 전달하는 방법입니다.

-if @disclosures.empty? 

[email protected] do |disclosure| 

업데이트

이 문제를 해결하는 또 다른 방법은 변경하여 렌더링 호출입니다. 이렇게하면 같은 부분의 다른 호출 사이트와 호환됩니다.

render :partial => "/influencers/disclosures/shared/list", :locals => {:disclosures => @disclosures} 
+0

감사합니다. 코드베이스에는 다른 부분 코드가 있습니다. 현재 부분적으로 사용할 수 있습니까? – GeekedOut

+0

위 업데이트를 참조하십시오. – CambridgeMike

+0

방금 ​​시도했는데,이 오류가 발생합니다. 예상하지 못했을 때 객체가 없습니다! Array의 인스턴스를 예상했을 수 있습니다. nil.empty를 평가하는 동안 오류가 발생 했습니까? – GeekedOut