我需要在所有控制器中调用几个变量。在布局页脚中显示最新消息。
我在application_controller.rb
中创建它们@hq_news_item = NewsItem.where(:branch_code => "CORP").first
@branch_news_item = NewsItem.where(:branch_code => "MN").first
在我的layouts / application.html.haml
中= render :partial => "layouts/footer_news" , :hq_news_item => @hq_news_item, :branch_news_item => @branch_news_item
然后在我的布局/ _footer_news中我设计了它们
= hq_news_item.title
= hq_news_item.author.name
... etc
无论我做什么,都是这样的事情 - 它一直在说hq_news_item是部分未定义的。
我所有的其他部分工作正常。我认为这与布局而非视图这一事实有关。在文档中找不到任何有意义的内容。
有什么想法吗?
谢谢。
答案 0 :(得分:7)
我认为你需要将变量作为局部变量传递给partial:
= render :partial => "layouts/footer_news", :locals => { :hq_news_item => @hq_news_item, :branch_news_item => @branch_news_item }
否则Rails不会真正理解你作为变量传递给partial的内容以及你作为参数传递给render函数的内容。
答案 1 :(得分:1)
为什么不直接使用成员变量@hq_news_item
?
当我在一个调用另一个的视图中有一个局部变量时,我发现我使用了locals方法。
此代码适用于rails 2.3.8
<% f.fields_for :member_collection do |builder| %>
<%= render "membrer_collection_fields", :form => builder %>
<% end %>
在这种情况下,我有一个局部_member_collection_fields,它具有局部变量形式