Rails博客存档按日期搜索

时间:2014-06-05 05:41:34

标签: jquery ruby-on-rails

我在rails archive blog上做了一个红宝石。后端工作正常,但是如下图所示,年份单独显示

enter image description here

正如你在上面的图片中看到的那样,这些年份正在单独出现。但是如果我在同一个月给出一些博客它可以正常工作,你可以在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

2 个答案:

答案 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>

输出:

output

答案 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

this answer