总览
该表格由2行6列组成,然后分为12个盒子,每个盒子大小为200px X 200px。现在,每个盒子的内容都包含一个新项(@books),该项是从单独的控制器(使用内置的生成脚手架命令)生成的。我还使用分页来限制页面上的项目数量(12个),因此旧项目会消失。
问题
我能够通过在我的控制器和视图上使用以下代码来填充每个12个盒子的内容:
控制器
def content
@books= Book.paginate(:page => params[:page], :per_page => 12)
respond_to do |format|
format.html # content.html.erb
end
查看 {content.html.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单独定位每本书。另一个问题是,我想在
greenz
更新
嗨Mike,我真的很感激你尝试向新手解释发生了什么。基本上,我回到了第一步,并将每个代码片段应用到看看在哪里出现问题。你正在非常棒地解释问题,但当渲染代码时,我无法理解发生了什么,因为渲染和布局的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>
当我应用这个代码时,渲染视图时出现了意外的结束错误,并指向我的代码的最后一行。(当在结尾添加结束标签时,它只会抛出另一个错误) 所以我将渲染页面从_bookcontent.html.erb更改为_book.erb,并像所示在column1 div之间插入了partial。
<div id ="column1">
<%= render :partial => "book" %>
</div>
<% end %>
我现在明白这个标签的作用了,它告诉我的局部代码,在渲染每本书时从数据库中获取最新的书籍ID。因此,现在渲染@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(book) do %> 是在每本书周围包装一个独特的div id,例如:
<div id="book_123"> Book.name / Book.Title </div>
这个 div 现在包含在我之前的 column1 div ID 中,它拥有我列/盒子的所有样式。由于 div_for 标签上缺乏信息,我仍然遇到代码中的错误和意外结束。(尝试使用 ruby -w 调试 _book.erb 不起作用,所以我不知道如何使用结束标记)。这些是我正在尝试纠正的要点,以保持清醒。
我应该从我的内容页面中删除
<div id="column1">
并在我的内容页面的其他位置应用新的 div id / class 吗?我应该在部分页面和我的 content.html.erb 中的分页之前插入 <% end %> 标签吗?当我同时拥有两个标签时,似乎渲染器会抱怨每个页面末尾的意外结束。
当用你的代码替换我的代码时,我收到了上述意外结束,但这并不是因为你的问题,我肯定是在我的代码中缺少了某个组件。
我可能从布局角度错误地处理了这个问题,但我的主要目标是有 2 行 6 个盒子/列,每个盒子都包含不同的书。然后使用分页向后滚动到早期的书,并应用相同的布局,现在它做得很好,但我为每本书使用了相同的列 id,需要单独定位所有盒子。