我正在尝试将属于同一日期的内容组合在一起进行显示,这样日期只会按时间顺序发布一次。
类似的东西:
2009年10月14日
第3项
第3项内容
项目2
第2项内容
2009年10月13日 第1项 第3项内容
如何在视野中显示? (假设从控制器传递@items,其中包含所有项目)
我尝试过group_by,但我无法让它工作,因为它似乎是按照当天的价值而不是与月份一起安排自己。
相关代码:http://github.com/davidchua/Political-Watch/blob/master/app/views/items/index.html.erb
要在实时部署中查看问题,请在http://political-watch.org
答案 0 :(得分:29)
items.group_by{ |item| item.created_at.to_date }
答案 1 :(得分:2)
1)将app / controllers / items_controller.rb的第5行替换为:
@items = Item.all(:order => "date DESC")
2)将app / views / items / index.html.erb的第3-14行替换为:
<% date = 1.day.from_now(@items.first.date.to_date) rescue nil # increment the day
@items.each do |item|
if date > item.date.to_date
date = item.date.to_date %>
<div style="background: #81BEF7;margin-top: 5px; margin-bottom: 5px;" class="rounded"><b><span style="padding: 5px"><%=h date %></span></b></div>
<%end%>
<p>
<i><%=h item.time %> - </i>
<%= link_to "#{item.title}", item.link %><br>
<a href="/items/<%=item.id%>"><span class="subtext" style="margin-left: 55px">by <%= item.user.username %> | <%=item.comments.count%> comments </span></a>
</p>
<% end # end for items_each%>
在这种方法中,您使用数据库进行排序,并进行简单的分组比较。
PS:我认为将数据库列命名为“date”并不是一个好主意。在某些数据库中,'date'是保留关键字。
答案 2 :(得分:0)
添加以下迁移:
class AddIndexToItemsStartDate < ActiveRecord::Migration
def change
add_index :items, :start_date
end
end
控制器:
@items = Item.where("start_date >= ?", Time.zone.now.beginning_of_day)
@items_by_day = @items.group_by { |t| t.start_date.beginning_of_day }
以漂亮的显示方式查看:
<% @items_by_day.sort.each do |day, items| %>
<h2><%= day.strftime("%d %B %Y") %></h2>
<table class="table table-striped">
<thead>
<tr>
<th>Item</th>
<th></th>
</tr>
</thead>
<% for item in items %>
<tbody>
<tr>
<td><%= item.item_id %></td>
<td><%= link_to 'Delete', item, method: :delete, data: { confirm: 'Are you sure?' } %></td>
</tr>
</tbody>
<% end %>
</table>
<% end %>