2016-10-03 31 views
0

我想在我的application.html.erb中渲染部分內容。部分源自產品文件夾「產品/類別」。當我嘗試在application.html.erb中插入一個部分時,如下所示,我得到#<#:0x007fcfa35c9c78>的未定義局部變量或方法`類別'。任何幫助是極大的讚賞。傳入部分對象

application.html.erb

<%= render 'products/categories', locals: { categories: categories }%> 

產品/ _categories.html.erb

<% @categories.each do |category| %> 
<li><%= category %></li> 
<% end %> 

products_controller.rb

def categories 
    @categories = ProductCategory.all 
end 

回答

1

隨着渲染你有

locals: { categories: categories } 

它將在您的部分中定義categories

但是在這部分中您指的是@categories

即使您不將它們作爲區域設置傳遞,您仍然可以訪問部分中的所有實例變量。

另請注意,控制器方法不會自動提供給視圖。

您還需要在控制器中寫入helper_method :categories或將該方法移至助手文件。

儘管將方法命名爲局部變量可能不是一個好主意,因此您應該將方法重命名爲get_categories或其他。

+0

我最後做的是剛剛創建的helper方法,並在_categories.html.erb引用它。我無法得到任何其他工作。 – RickD

0

您正在將區域設置爲locals: { categories: categories }作爲局部變量傳遞,並且鑑於您調用的實例變量@categories不會進入該視圖。 試圖通過語言環境locals: { categories: @categories },並考慮使用

<% categories.each do |category| %> 
0

儘量遵循:不要在局部使用實例變量。

將變量傳入部分。您可以使用render簡寫,而不是render partial,這使得它更易於閱讀。

<%= render "products/categories", categories: @categories %>

# app/views/products/categories 
<% categories.each do |category| %> 
<li><%= category %></li> 
<% end %> 
+0

謝謝,但我不能得到它的工作使用輔助方法。 – RickD

0

您需要添加partial:如果想通過PARAMS局部。另外,您錯過了錯字locals,使它@categories

<%= render partial: 'products/categories', locals: { categories: @categories }%> 

和循環它不@

<% categories.each do |category| %> 
<li><%= category %></li> 
<% end %> 
+0

謝謝,但我不能得到它的工作使用輔助方法。 – RickD