2012-01-08 66 views
1

我剛開始在我的Rails應用程序中使用局部模板,此刻我有下面的代碼在我application.html.erb動態數據

<%= render 'categories/categorieslist' %> 

此鏈接_categorieslist.html .erb在我的意見/類別/文件夾

目前這部分包含硬編碼的超鏈接

<ul class="unstyled"> 
    <li style="padding-bottom:5px"><a href="#">Item A&raquo;</a></li> 
    <li style="padding-bottom:5px"><a href="#">Item B&raquo;</a></li> 
</ul> 

我的目標是讓這些類別來自數據庫,如

<ul class="unstyled"> 
    <% @categories.each do |category| %> 
     <li style="padding-bottom:5px"><a href="#"><%= category.name %> &raquo; </a></li> 
    <% end %> 
</ul> 

我試圖在類別控制器如

def categorieslist 
@categories = Category.all 
    respond_to do |format| 
    format.html # index.html.erb 
    format.json { render json: @categories } 
    end 
    end 

添加categorieslist方法,但這種不會被調用的部分(我不覺得這是連做正確的方法它),並呈現出就行了<%@ categories.each錯誤

NoMethodError in Store#index 

做|類別| %>

我的問題是我如何傳遞到application.html.erb文件中的部分,這些類別對象通常來自類別控制器中的控制器方法?

任何幫助將是偉大的。

回答

3

您可以發送locales您的視圖中的部分調用並將變量傳遞給該部分。

例如(這是一個局部的快捷方式):從中調用部分

<%= render 'categories/categorieslist', :all_categories => @categories %> 

你的部分類別/ _categorieslist.html.erb(注意沒有@與

您的看法變量)

<ul class="unstyled"> 
    <% all_categories.each do |category| %> 
    <li style="padding-bottom:5px"><a href="#"><%= category.name %> &raquo; </a></li> 
    <% end %> 
</ul> 

如需進一步信息(和長版本),見在滑軌指南3.4.4 Passing Local Variables

+0

謝謝,我不太清楚的一件事是如何安排代碼,以便傳入此部分的@ categories集合通過調用@ categories = Category.all來填充,此activerecord查詢的位置應該放在哪裏代碼,如果部分是在佈局文件application.html.erb中? – norbert 2012-01-10 07:58:27

+0

如果它在application.html.erb中,它應該放到你的ApplicationController中。在這裏,你可以使用before_filter和def'get_cats @categories = Category.all end'這樣的方法,或者你可以用'<%= render'categories/categorieslist'直接調用方法(它返回方法中的最後一個值) ,:all_categories => get_cats%>' – 2012-01-10 08:44:42

+0

這太好了,我不確定是否有可能在ApplicationController中包含這樣的東西,並沒有找到任何明確的例子,謝謝! – norbert 2012-01-10 09:09:01

0

我會使用一個集合這樣的:

<%= render 'categories/categorieslist', :collection => @categories, :as => :category %> 

這使得項目的集合。在這種情況下,所有的類別。您還可以使用:as =>將自定義名稱傳遞給它。

然後在你的部分只包括你想要的集合中的項呈現的東西:

<li style="padding-bottom:5px"><a href="#"><%= category.name %> &raquo; </a></li> 

的-ul-不包括因爲它會被渲染多次。你需要將它包裝在你的渲染標籤中。

結果與@timbrandes提出的建議相同(請查看他鏈接到的文檔)。

我聽說過:集合可以提高性能。 http://rails-bestpractices.com/posts/38-use-render-collection-rails-3-when-possible

0

這不是正確的做法,而你的問題相當混亂。

我想說,你仍然必須讀一本滑軌書。你似乎仍然有點太新

無論如何,控制器方法通常代表http請求。並且它們被相應地調用到config/routes文件中定義的內容。視圖(* .erb)通常不會調用控制器方法。如果他們這樣做,他們通過ajax請求。

數據通過控制器實例變量從動作傳遞給視圖。

如果你想調用視圖內的任何方法,它們應該在助手中定義。但是,他們將操作的唯一數據是從控制器作爲實例變量傳遞的數據。