Как передать локальную переменную в частичное из макета приложения в рельсах 3? - PullRequest
3 голосов
/ 12 марта 2011

У меня есть пара переменных, которые нужно вызывать во всех контроллерах.Отображение последних новостей в нижнем колонтитуле.

Я создаю их в 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 частично не определен.

Все остальные мои части работают нормально,Я думаю, что это связано с тем, что это макет, а не представление.Не могу найти ничего значимого в документах.

Есть идеи?

Спасибо.

Ответы [ 2 ]

7 голосов
/ 12 марта 2011

Я думаю, вам нужно передать переменные как локальные переменные в партиал:

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

В противном случае Rails действительно не поймет, что вы передаете как переменную в партиал, а что вы передаете какаргумент для функции рендеринга.

1 голос
/ 12 марта 2011

почему бы вам просто не использовать переменную-член @hq_news_item?

Я обнаружил, что использую метод locals, когда у меня есть локальная переменная внутри представления, которое вызывает другое.

Этот код работает в рельсах 2.3.8

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

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

<% end %>

В этом случае у меня есть частичное _member_collection_fields, которое имеет локальную переменную форму

...