我正在学习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。提前谢谢
答案 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 %>
现在无需进行排序,它已经排序(而且数据库在执行此操作时效率更高)