【发布时间】:2011-01-26 05:36:41
【问题描述】:
我已经多次使用这个网站来找到我的答案,但不幸的是我现在卡住了,需要一些帮助。在我的主要内容页面上,我正在处理使用 CSS 和 div id 创建表格的问题。
概述
该表由 2 行 6 列组成,然后分成 12 个框,每个框 200 像素 X 200 像素。现在每个盒子的内容都包含一个新项目(@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,我可以单独定位每一本书。另一个问题是我想对其中的所有内容使用渲染部分,但是当我使用渲染部分时,它将所有项目放在 1 列中 {重新列出 Book.all },所以它只是重复所有包含的信息。我有一种感觉,我想使用另一种方法或编辑当前的方法来完成此操作,但我不确定会发生什么。谢谢!
绿色
更新
嘿,迈克,我非常感谢您努力向新手解释发生了什么。我基本上回到了第一步,应用了每段代码,看看它在哪里疯狂。您在解释问题方面做得很好,但我无法理解渲染代码时发生了什么,因为用于渲染和布局的 ruby 文档非常基本,并且没有任何示例可以让我看到 div_for 标签如何影响渲染过程(我是一个视觉的人)。我想向您展示新代码,但 cmets 不允许,所以我打开了一个答案:(
第一次修改是删除
<% @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 之间插入部分,如图所示。
<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 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/类?在分页前的部分和 content.html.erb 中,我应该在哪里插入一个 标签?似乎当我同时拥有两个渲染器时,都会抱怨每页末尾的意外结束。
当用您的代码代替我的代码时,我收到了上述意外结果,但这并不是因为您在我的代码中肯定遗漏了一个组件。
首先,从布局的角度来看,我可能会以错误的方式处理此问题,但我的主要目标是有 2 行,每列 6 个框/列,每个框包含不同的书。然后使用分页滚动回较早的书籍并应用现在可以正常使用的相同布局,但我为每本书使用相同的列 ID,并且需要分别定位所有框。
【问题讨论】:
标签: ruby-on-rails-3