我的应用程序显示EXTRA信息...这是不需要的

时间:2010-12-20 11:27:54

标签: ruby-on-rails-3

我有一个名为'list'的动作,定义为

def list
   @subjects = Subject.order("subjects.position ASC")  
end

我的列表视图看起来像

<div>
  <h2>Subjects</h2>

  <%= link_to("Add new subject",{:action=>'new'},:class=>'action new')%>
  <table class="listing" summary="Subject list">
    <tr class="header"> 
      <th>&nbsp;</th>
      <th>Subject</th>
      <th>Visible</th>
      <th>Pages</th>
      <th>Actions</th>
    </tr>

    <%= @subjects.each do |subject| %>  
     <tr>
     <td><%=subject.position%></td>   
     <td><%=subject.name%></td>   
     <td class="center"><%=subject.visible ? 'Yes':'No' %></td>
     <td class="center"><%=subject.pages.size%></td>
     <td class="actions">
       <%=link_to "Show",{:action=>'show',:id=>subject.id},:class=>'action show'%>
       <%=link_to "Edit",{:action=>'edit',:id=>subject.id},:class=>'action edit'%>
      <%=link_to "Delete",{:action=>'delete',:id=>subject.id},:class=>'action delete'%>
   </td>
  </tr>
 <%end%>   

 </table>
</div>

所以问题是除了获得我的链接“添加主题”附近所有主题的有组织列表之外,页面还会打印 @subjetcs 从控制器带来的所有信息。

当然这不是一个好主意......我无法弄清楚为什么会发生这种情况

3 个答案:

答案 0 :(得分:2)

您的问题是<%= @subjects.each do |subject| %>行。因为你有<%=,所以该行的返回值 - @subjects - 应写入文档。

使用<% @subjects.each do |subject| %>代替抑制输出。

答案 1 :(得分:0)

<%= @subjects.each do |subject| %>行中删除等号。

ERB将<%= ... %>标记内的所有内容输出到页面。因此,在这种情况下,@subjects.each的返回值将写入页面。因此,请改写这样的循环:

<% @subjects.each do |subject| %>
  ...
<% end %>

这适用于所有执行内容而不是向页面输出内容的语句。例如,您可以将if语句写为:

<% if some_condition %>
  ...
<% else %>
  ...
<% end %>

而不是:

<%= if some_condition %>
  ...
<% else %>
  ...
<% end %>

答案 2 :(得分:0)

<%= @subjects.each do |subject| %>

应该是:

<% @subjects.each do |subject| %>

等号告诉ERB代码应该输出一些东西。你想在迭代器中省略它。