好了到目前为止我创建了一个新的控制器:
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
答案 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?
。