2011-01-26 68 views
2

我已經使用這個站點大量的時間來找到我的答案,但我很抱歉現在需要一些幫助。在我的主要內容頁面上,我正在研究使用CSS和div ID創建表格的問題。Ruby on Rails使用動態內容和局部視圖渲染表格

概述

表被損害的2行和6列,然後蔓延到12個箱每箱200像素X 200像素哪個。現在每個框的內容都包含一個新的項目(@books),它是由一個單獨的控制器生成的(使用內置的生成scaffold命令)。我還使用分頁來限制頁面上的項目(12),以便舊的項目能夠回滾。

問題

我能夠用我的控制器和視圖

控制器

def content 
@books= Book.paginate(:page => params[:page], :per_page => 12) 
respond_to do |format| 
    format.html # content.html.erb 
end 

查看{content.html以下代碼來填充每個新內容12盒。 erb}

<% @books.each do |book| %> 
    <div id="column1"> 
     <tr> 
     <td><%= book.name %></td> 
     <td><%= book.title %></td> 
     <td><%= book.content %></td> 
     <td><%= link_to 'Show', book %></td> 
    </tr> 
    </div> 
    <% end %> 
<br /> 
<div id="paginate"> 
    <%= will_paginate(@books, 
) %) 
</div> 
</div> 

當我生成視圖時會發生什麼是完美呈現,但我所有的書都使用相同的「列1」

 <div id="column1"> 
     <tr> 
     <td>Title</td> 
     <td>Name</td> 
     <td>Content</td> 

     <td><a href="/books/4d376fc63060da4abc000002">Show</a></td> 
    </tr> 
    </div> 
    <div id="column1"> 
     <tr> 
     <td>Title </td> 
     <td>Name</td> 
     <td>Content</td> 

     <td><a href="/books/4d3c96383060da31c9000001">Show</a></td> 
    </tr> 
    </div> 

我想對於每本書有其自己的列{2,3,4,... 12}這樣我就可以瞄準每個人如果我需要使用jQuery。另一個問題是,我想使用渲染partial來處理所有內容,但是當我使用渲染partial時,它將所有項放置在1列{rel.Book.all}中,因此它只是重複所有包含的信息。我有一種感覺,我假設使用另一種方法或編輯當前的方法來完成這一點,但我不確定發生了什麼。謝謝!

greenz

更新

嘿麥克我真的很感激你在想什麼事情解釋給一個牛逼的努力。我基本上回到第一步,應用每一段代碼,看看它在哪裏發瘋。你正在做一個很好的工作來解釋這個問題,但我無法理解渲染代碼時發生了什麼,因爲用於渲染和佈局的ruby文檔非常基本,並且沒有任何示例,我可以看到div_for標記如何影響渲染過程我是一個視覺的人)。我想告訴你的新代碼,但註釋不允許,所以我開了一個答案:(

第一個修改是去掉

<% @books.each do |book| %> 

<table> 
    render @books 
</table> 

所以更換現在我的代碼看起來像這樣{} content.html.erb

<div id="maincontent"> 

    <table> 
    render @books 
    </table> 
    <div id ="column1"> 
     <tr> 
      <td><%= book.name %></td> 
      <td><%= book.title %></td> 
      <td><%= book.content %></td> 
      <td><%= link_to 'Show', book %></td> 
     </tr> 

    </div> 
    <% end %> 
    <br /> 

    <div id="paginate"> 

    <%= will_paginate(@books, 
    ) %> 
    </div> 
</div> 

當這個應用我收到意想不到的è nd錯誤,當渲染視圖指向我的代碼的最後一行(當添加結束標記到最後它只是拋出另一個錯誤)所以我然後改變渲染頁面從_bookcontent.html.erb到_book.erb並插入部分介於column1 div之間,如圖所示。

<div id ="column1"> 

     <%= render :partial => "book" %> 

    </div> 

<%結束%>

我明白這是什麼標記做,現在告訴我的部分,對於每一個「書」呈現來自數據庫的最新著作ID。所以現在render @books語句跟蹤我插入的每個呈現頁面的書籍ID。 (我可能會誤解,但這是我如何看待它)。所以現在到這個頁面渲染的臭名昭着的 _book.erb是我的代碼。

<% div_for(book) do %> 
<tr> 
    <td><%= book.name %></td> 
    <td><%= book.title %></td> 
    <td><%= book.content %></td> 
    <td><%= link_to 'Show', book %></td> 
</tr> 
<% end %> 

從我的<%div_for(書)上閱讀做%>披着每本書的唯一DIV ID,例如

<div id="book_123"> Book.name/Book.Title </div> 

這個div現載我COLUMN1 DIV ID內從之前有我的專欄/箱子的所有樣式。從缺少div_for標籤的信息,我仍然遇到了代碼中的錯誤和意外結果。 (試圖用ruby -w調試_book.erb不起作用,所以我不知道如何使用結束標籤)。這些是我想要糾正我的理智。

  1. 我應該刪除從我的內容頁面的<div id="column1">和我的內容網頁上的其他應用新的DIV ID /類?

  2. 在我的分頁之前,我在哪裏插入<%end%>在partial和content.html.erb中標記了一個?看起來好像當我有兩個渲染器抱怨在每個頁面結尾的意外結束。

  3. 當用你的代碼代替地雷時,我收到了上述意外的結果,但這不是由於你在我的代碼中肯定缺少一個組件。

  4. 我可能會從佈局上感知錯誤的方式接近這個錯誤的方式,但我的主要目標是有2行6個框/列,每個框包含一本不同的書。然後使用分頁回滾到早期的書籍,並應用相同的佈局,現在它確實很好,但是我爲每本書使用相同的列ID,並且需要單獨定位所有框。

回答

2

如果我正確地理解了你,這只是它做你所說的事情,而不是你的意思。

無論控制器具有內容的方法應該是這樣的:

def content 
    @books = Book.paginate :page => params[:page], :per_page => 50 
end 

你的觀點應該是這樣的(舊的語法,但還是應該正常工作)。

content.html.erb:

<div id="maincontent"> 
    <table> 
    <%= render :partial => 'book', :collection => @books %> 
    </table> 
    <br /> 
    <%= will_paginate @books %> 
</div> 

或者嘗試新的語法。新的語法很奇怪,我沒有嘗試過,但我認爲這應該起作用。因此,這裏是替補,更Rails 3的版本content.html.erb的:

<div id="maincontent"> 
    <table> 
    <%= render @books %> 
    </table> 
    <br /> 
    <%= will_paginate @books %> 
</div> 

我認爲它選擇基於類名的部分,以及是否可枚舉。

The_book.html。erb部分:

<%= div_for(book) do %> 
<tr> 
    <td><%= book.name %></td> 
    <td><%= book.title %></td> 
    <td><%= book.content %></td> 
    <td><%= link_to 'Show', video %></td> 
</tr> 
<% end %> 

Div_for是祕密的醬油。

唯一需要的是在div_for之後調用do時打開的塊關閉部分。

+0

我固定的代碼。我在div_for語句結尾忘記了「do」。請注意,我在視圖中有表格標籤,div和tr標籤將在部分中創建。 – mikewilliamson 2011-01-26 13:06:00

0
Now i am getting unexpected end errors when i render the page here is my view 

view = content.html.erb 

    <div id="maincontent"> 

    render @books 
     <div id="column1"> 
     <tr> 
      <%= render :partial => "bookcontent" %> 
     </tr> 
     </div> 
     <% end %> 
    <br /> 
     <div id="paginate"> 
     <%= will_paginate(@books, 
     ) %> 
     </div> 
    </div> 

Here is my render partial = _bookcontent.html.erb 
    <% div_for(book) %> 
<tr> 
    <h3><%= book.name %></h3> 
    <h3><%= book.title %></h3> 
    <h3><%= book.content %></h3> 
    <h3><%= link_to 'Show', book %></h3> 
</tr> 
<% end %> 

我也無能爲力,如果我應該使用div id或class。默認情況下,我總是隻使用一個ID。每本書

column1 
column2 
column3 
... 

+0

Rails着名的「convention over configuration」的一部分是名稱非常重要。部分的名稱將被用作內部變量的名稱。 _book意味着局部變量將創建一個局部變量「book」。您將部分_bookcontent命名,但使用變量「book」而不創建它。與此同時,Rails根據您使用的名稱創建了一個var _bookcontent。請記住,您傳遞的是書籍(模型)集合,並且每個書籍的部分內容都會呈現一次。 – mikewilliamson 2011-01-26 12:53:49

-1

如果我理解正確的,你的代碼工作正常,但你想擁有。如果是這樣的話,你爲什麼不乾脆更換:

<div id="column1"> 

<div id="column#{@book.id}"> 

或使用計數器

<% 
book_counter=0 
@books.each do |book| 
book_counter = book_counter+1 
%> 
    <div id="column#{book_counter.to_s}">