2011-03-12 152 views
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

回答

7

我認爲你需要的變量作爲局部變量傳遞給部分:

= 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

1

爲什麼你不使用成員變量@hq_news_item

我發現我使用本地方法,當我有一個視圖內調用另一個本地變量。

這段代碼在軌工作2.3.8

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

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

<% end %> 

在這種情況下,我有一個具有本地變量形式的局部_member_collection_fields

相關問題