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

问题描述:

我有一些变量需要在所有控制器中调用。在布局页脚中显示最新消息。如何将局部变量传递给rails 3中的应用程序布局?

创建他们application_controller.rb

@hq_news_item = NewsItem.where(:branch_code => "CORP").first 
@branch_news_item = NewsItem.where(:branch_code => "MN").first 

在我的布局/ 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

你不提,其中在application_controller要设置这些实例变量。 – aceofspades 2011-03-14 03:35:14

+0

不好意思,有2个私有方法在过滤之前调用,名为get_hq_news_item&get_branch_news_item。 – konung 2011-03-14 15:12:09

我认为你需要的变量作为局部变量传递给部分:

= render :partial => "layouts/footer_news", :locals => { :hq_news_item => @hq_news_item, :branch_news_item => @branch_news_item } 

否则Rails会不会真正理解你传递什么作为变量的部分和要传递什么作为参数给渲染函数。

+1

谢谢。我发现我需要更仔细地阅读文档。我认为我写的是Rails 3向局部发送局部变量的新语法。在我所有的其他部分中,我没有为变量使用自定义名称,所以它的工作原理,你不是因为我假设的原因。这个小小的和平轨道指南清除了它:每个部分也有一个局部变量,其名称与部分相同(减去下划线)。你可以通过:object选项将一个对象传递给这个局部变量:'感谢让我看向正确的方向“:-) – konung 2011-03-14 14:03:35

为什么你不使用成员变量@hq_news_item

我发现我使用本地方法,当我有一个视图内调用另一个本地变量。

这段代码在轨工作2.3.8

<% f.fields_for :member_collection do |builder| %> 

    <%= render "membrer_collection_fields", :form => builder %> 

<% end %> 

在这种情况下,我有一个具有本地变量形式的局部_member_collection_fields