我有这个控制器:
def index
@disclosures = Disclosure.where(:user_id => current_user.id)
respond_to do |format|
format.html{}
format.js{}
end
end
并且在StackOverflow的优秀人员的帮助下,我现在可以让我的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>
但这怎么可能呢?我只是在控制器中询问了披露对象。知道为什么会这样,以及如何解决它?
谢谢!
答案 0 :(得分:4)
您需要在披露前加上@。这是控制器将变量传递给视图的方式。
-if @disclosures.empty?
和
-@disclosures.each do |disclosure|
<强>更新强>
解决此问题的另一种方法是更改渲染调用。这将使其向后兼容同一部分的其他呼叫站点。
render :partial => "/influencers/disclosures/shared/list", :locals => {:disclosures => @disclosures}