【问题标题】:How to pass local variable to partial from application layout in rails 3?如何将局部变量从rails 3中的应用程序布局传递给部分?
【发布时间】:2011-03-14 23:12:45
【问题描述】:

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

我在 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

然后在我的 layouts/_footer_news 中设置样式

= hq_news_item.title
= hq_news_item.author.name
... etc

事情就是这样,不管我做什么 - 它一直说 hq_news_item 部分未定义。

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

有什么想法吗?

谢谢。

【问题讨论】:

  • 您没有提到您在 application_controller 中的哪个位置设置这些实例变量。
  • 对不起,过滤器之前调用了 2 个私有方法,称为 get_hq_news_item 和 get_branch_news_item。

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


【解决方案1】:

我认为您需要将变量作为局部变量传递给部分:

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

否则 Rails 不会真正理解您将什么作为变量传递给部分,以及您作为参数传递给渲染函数的内容。

【讨论】:

  • 谢谢。我发现我需要更仔细地阅读文档。我认为我写的是 Rails 3 的一种新语法,用于将本地变量发送到局部变量。在我的所有其他部分中,我没有为变量使用自定义名称,所以它起作用了,你不是因为我假设的原因。这个小小的和平指南清除了它:Every partial also has a local variable with the same name as the partial (minus the underscore). You can pass an object in to this local variable via the :object option: 感谢您让我朝着正确的方向寻找“:-)
【解决方案2】:

为什么不直接使用成员变量@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

【讨论】:

    猜你喜欢
    • 2012-06-21
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    • 1970-01-01
    • 2016-11-20
    相关资源
    最近更新 更多