我在rails archive blog上做了一个红宝石。后端工作正常,但是如下图所示,年份单独显示
正如你在上面的图片中看到的那样,这些年份正在单独出现。但是如果我在同一个月给出一些博客它可以正常工作,你可以在august 2014
(意外,政治)月看到但不是2014年。
这是控制器
@posts_by_month = Cutting.find(:all, :order => "date DESC").group_by { |post| post.date.beginning_of_month }
视图
<div class="easy-tree" style="float:left;width:300px;background: #aaaaaa;">
<%# @post_months.sort.reverse.each do |month, posts| %>
<%@posts_by_month.each do |month, posts|%>
<ul>
<li><%=h month.strftime("%G")%>
<ul>
<li><%=h month.strftime("%B") %>
<!--li ><%=h month.strftime %>-->
<ul>
<% for post in posts %>
<li style="background: #aaaaaa;"class="getid" name ="<%=post.id%>"><%=h link_to post.subject%></li>
<% end %>
</ul>
<!--/li-->
</li>
</ul>
</li>
</ul>
<% end %>
</div>
我使用easy-tree来获取
的ui答案 0 :(得分:2)
试试这个
@posts = Cutting.all(:select => "id, subject, date, created_at", :order => "date DESC")
@post_months = @posts.group_by { |t| t.created_at.beginning_of_year }
关于你的意见
<div class="easy-tree" style="float:left;width:300px;background: #aaaaaa;">
<% @post_months.sort.reverse.each do |year, postss| %>
<ul>
<li><%=h year.strftime("%G")%>
<% postss.group_by { |t| t.created_at.beginning_of_month }.each do |month, posts| %>
<ul>
<li><%=h month.strftime("%B") %>
<ul>
<% for post in posts %>
<li style="background: #aaaaaa;" class="getid" name ="<%=post.id%>"><%=h link_to post.subject %></li>
<% end %>
</ul>
</li>
</ul>
<% end %>
</li>
</ul>
<% end %>
</div>
输出:
答案 1 :(得分:0)
我的预感是您的查询仅按月对帖子进行分组 - 这意味着您将根据他们一个月的时间收回一个对象。虽然这可能会显示year
/ month
,但对象的基础结构将以月份为中心,而不是数年(如您所愿)。
测试此方法的一种方法是在视图中调用@posts_by_month.debug
,让您可以准确查看对象的外观。我猜测它将按月分类
-
<强>修正强>
解决此问题的方法将由year
分组,然后由month
分组。我从来没有这样做,但有researched&amp;发现底线是您需要按year
分组,然后按month
分组,如下所示:
@posts_by_month = Post.all.order(date: :desc).group("year(created_at)").group("month(created_at)")
我的示例使用引用.group