在正常页面中渲染部分

时间:2013-07-19 13:28:54

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

在我的视图中,我有一个名为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> 

1 个答案:

答案 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>