按月划分红宝石

时间:2015-07-15 03:27:43

标签: mysql ruby-on-rails ruby ruby-on-rails-3

我正在学习rails并遇到问题。它类似瑞恩贝茨http://railscasts.com/episodes/29-group-by-month问题,但它失败了。

我的设置如下:

class EventsController < ApplicationController
def index
    @events = Event.all
    @events_by_month = @events.group_by { |x| [x.date.beginning_of_month] }

end

案例1:

<% @events_by_month.keys.sort.each do |month| %>
    <% for firm in @events_by_month[month] %>
       <%= firm.name %>  <%= firm.date.to_date.to_s(:long) %>
    <% end %><br>
<% end %>

这给了我以下结果:

Little LLC 2014年10月24日
Kovacek,Borer和Dickinson 2014年10月16日
Rogahn-Cruickshank 2014年10月6日
Harris-Dicki 2014年10月31日

Kutch-Schulist 2014年11月18日

Dicki,Gleason和Cremin 2014年12月7日
Robel,Simonis和Bechtelar 2014年12月28日
Kuvalis-Schumm 2014年12月23日

案例2:如果我插入month.strftime,那么我会收到错误。

<% @events_by_month.keys.sort.each do |month| %>
    <h2><%= month.strftime("%B %Y") %></h2>
    <% for firm in @events_by_month[month] %>
       <p> <%= firm.name %>  <%= firm.date.to_date.to_s(:long) %></P>
    <% end %><br>
<% end %>

案例1-问题:结果按月分组,但不按顺序分组。根据教程,它应该已经订购了哈希。

案例2 - 问题:我收到错误:未定义的方法`strftime&#39; for [Mon,01 Sep 2014 00:00:00 UTC +00:00]:提取的来源(第2行):

我查看了Ruby on Rails group_by (how to group events by month)并确实打印了一个月,但哈希仍然无法正常运行。

摘要:我正在寻找有关订购分组月份内的商品以及显示月份的帮助。我使用Ruby ruby​​ 2.1.4p265(2014-10-27修订版48166)[x86_64-darwin14.0]和Rails 4.2。提前谢谢

1 个答案:

答案 0 :(得分:0)

我相信你忘了在查询中对事件进行排序

class EventsController < ApplicationController
def index
    @events = Event.all.order(:date)
    # HERE: You don't need to enclose that in array, that's why it fails in view
    @events_by_month = @events.group_by { |x| x.date.beginning_of_month }

end

然后在视图中你可以做到

<% @events_by_month.each do |begin_month, events| %>
    <h2><%= begin_month.strftime("%B %Y") %></h2>
    <% events.each do |firm| %>
       <p> <%= firm.name %>  <%= firm.date.to_date.to_s(:long) %></P>
    <% end %><br>
<% end %>

现在无需进行排序,它已经排序(而且数据库在执行此操作时效率更高)