0

在我看来,我有一个名为 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> 
4

1 回答 1

1

部分期望有一个@ebms未定义的实例变量调用,因此它的nil值和 nil 值不能像您在部分中尝试那样迭代。所以你要么改变部分,所以它需要一个真正给出的实例变量,或者你需要在你的控制器中定义@ebms,以便部分可以使用它。

在控制器中,您需要像这样定义实例变量:

@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> 
于 2013-07-19T13:45:27.927 回答