2010-12-20 78 views
2

我所說的「名單」的行動,是指像我的應用程序是顯示額外的信息......這是不是需要

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> 

所以問題在於,除了獲得我的鏈接「添加主題」附近的所有主題的組織清單之外,頁面還會打印所有來自控制器的信息。

這當然不是一個很好的主意......我想不通這是爲什麼發生的

回答

2

你的問題是行<%= @subjects.each do |subject| %>。因爲你有<%=,該行的返回值 - 即@subjects - 應寫入文檔中。使用<% @subjects.each do |subject| %>代替抑制輸出。

0

刪除等於從<%= @subjects.each do |subject| %>上簽名。

ERB將<%= ... %>標籤內的所有內容輸出到頁面。所以在這種情況下,返回值@subjects.each被寫入頁面。因此,寫下你的循環代替:

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

這適用於做東西而不是輸出東西到頁面的所有語句。例如,你可以寫一個if語句爲:

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

而不是:

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

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

應該是:

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

等號告訴ERB認爲代碼應該輸出一些東西。你想在迭代器中省略它。

相關問題