在新站点,rails中部分渲染

时间:2013-07-19 15:38:08

标签: ruby-on-rails ruby-on-rails-3

好了到目前为止我创建了一个新的控制器:

rails g controller home settings

在settings.html.erb中,我想显示一个部分,以便我只添加一行:

<%= render "categories/index", :locals => {:categories => @categories} %>

所以我的类别/ _index.html.erb看起来像这样,并且有效:

<% for category in @categories do %>
 <tr>
 <td><%= category.typ %></td>    
 <td><%= link_to "Löschen", category,:class => 'btn btn-mini btn-danger', method: :delete, data: { confirm: 'Sind sie sicher?' } %></td>
  </tr>
  <% end %>
  <tr>
  <%= form_for Category.new do |f| %>
   <td> <%= f.text_field :typ, :class => "input-small" %></td>    
   <td><%= f.submit "Speichern", :class => 'btn btn-mini btn-success' %></td>
</tr>
<% end %>
</table>
</div>

但现在当我打开localhost:3000 / home / settings时出现错误:

Home#settings中的NoMethodError

显示C:/Sites/rublesql/app/views/categories/_index.html.erb第10行:

未定义的方法`每个'为nil:NilClass 提取的来源(第10行):

7:     <th></th>
8:   </tr>
9: 
10:  <% for category in @categories do %>
11:   <tr>
12:     <td><%= category.typ %></td>    

所以我的问题是我错了什么?

分类控制器:

class CategoriesController < ApplicationController
def index
    @categories = Category.all
end
def destroy
    @category = Category.find(params[:id])
    @category.destroy
    redirect_to categories_path
end
def create
@category = Category.new(params[:category])
@category.save
redirect_to categories_path
end
end

2 个答案:

答案 0 :(得分:1)

这意味着尚未设置@categories实例变量。 检查控制器是否设置了@categories = xx

答案 1 :(得分:1)

我注意到三件事:

你将符号与部分混合。以前你会这样做render partial: "x", locals: {},现在你可以删除partial密钥并只发送视图路径,但如果你选择这样做,你也会删除locals:密钥:

<%= render "categories/index", {categories: @categories} %>

此外: {:categories => @categories}categories成为您的本地人,而非@categories。 但是,你的实例@categories也应该通过,所以这不是你的问题。

最后: @categories未设置(如果是,则变为零)。要么确保您的控制器正确分配它,要么在尝试循环之前检查.nil?.present?