我有一个名为'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> </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 从控制器带来的所有信息。
当然这不是一个好主意......我无法弄清楚为什么会发生这种情况
答案 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代码应该输出一些东西。你想在迭代器中省略它。