如何在rails 3中将局部变量传递给部分应用程序布局?

时间:2011-03-12 01:39:51

标签: ruby-on-rails layout partial-views partial

我需要在所有控制器中调用几个变量。在布局页脚中显示最新消息。

我在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是部分未定义的。

我所有的其他部分工作正常。我认为这与布局而非视图这一事实有关。在文档中找不到任何有意义的内容。

有什么想法吗?

谢谢。

2 个答案:

答案 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,它具有局部变量形式