在我的视图中,我有一个名为categories的文件夹,在该文件夹中有一个文件索引。 一切顺利,直到我试图在该网站中呈现部分内容:
<div class="row-fluid">
<div class="span3">
<table class="table table-striped">
<tr>
<th>Kategory:</th>
<th></th>
</tr>
<% for category in @categories do %>
<tr>
....................................
<div class="span9">
<%= render "ebms/star" %>
</div>
</div>
不知怎的,我得到了错误
NoMethodError in Categories#index
Showing C:/Sites/rublesql/app/views/ebms/_star.html.erb where line #10 raised:
undefined method `each' for nil:NilClass
<% for ebm in @ebms do %>
11: <tr>
12: <td><%= ebm.number %></td>
13: <td><%= ebm.text %></td>
但我真的不知道如何改变我的偏见:
<table class="table table-striped">
<tr>
<th>Nummer:</th>
<th>Text:</th>
<th>Beschreibung:</th>
<th></th>
<th></th>
</tr>
<% for ebm in @ebms do %>
<tr>
<td><%= ebm.number %></td>
<td><%= ebm.text %></td>
<td><%= ebm.content %></td>
<td><%= ebm.star %></td>
<td><%= link_to 'Star', set_star_path(ebm), method: :put, confirm: 'Are you sure?' %> </td>
</tr>
<% end %>
</table>
答案 0 :(得分:1)
部分期望有一个实例变量calles @ebms
没有定义,所以它的nil
和nil值不能像你在partial中尝试一样迭代。因此,您要么更改部分所以它需要一个真正给定的实例变量,或者您需要在控制器中定义@ebms,以便部分可以使用它。
在控制器中,您需要像这样定义实例var:
@ebms = ModelName.where("<conditions>")
它很简单,或者你可以改变你的部分所以如果没有定义@ebms或者nil那么它的eaven ... ...
<table class="table table-striped">
<tr>
<th>Nummer:</th>
<th>Text:</th>
<th>Beschreibung:</th>
<th></th>
<th></th>
</tr>
<% if defined?(@ebms) && !@ebms.nil? %>
<% for ebm in @ebms do %>
<tr>
<td><%= ebm.number %></td>
<td><%= ebm.text %></td>
<td><%= ebm.content %></td>
<td><%= ebm.star %></td>
<td><%= link_to 'Star', set_star_path(ebm), method: :put, confirm: 'Are you sure?' %> </td>
</tr>
<% end %>
<% end %>
</table>