2014-05-01 275 views
0

所以我有一个数据库,像这样:集团月份又一年,月天/年

date 
11-23-2013 
11-24-2013 
... 
01-05-2014 

我试图创建由年份排序,然后按月份,但不重复值散列(比如,11月份有30个实例,它应该只显示一次并跳到下个月)。我试图让他们在JSON以显示为:

{2014[05,04,03,02,01], 2013[12,11]} 
{12[31,30,29...], 11[30,29,28...]} 

我是新来的Rails,到目前为止,这是我所:

控制器

@year = Model.select("year(date) as date").group("year(date)").order("date DESC") 
@month = Model.select("month(date) as date").order("date DESC").group_by{ |m| m.date.year } 
@day = Model.select("day(date) as date").group("day(date)").group_by{ |d| d.date.month } 

respond_to do |format| 
     format.html { render :action => :show } 
     format.js 
     format.json { render :json => {:year => @year, :month => @month, :day => @day}} 

月,为例如,什么是示出了在向上JSON为:

31557600.0: [{date:1, id:null}] 
63115200.0: [{date:2, id:null}] 
94672800.0: [{date:3, id:null}] 
126230400.0: [{date:4, id:null}] 
347133600.0: [{date:11, id:null}] 
378691200.0: [{date:12, id:null}] 

回答

1

阵列group_by方法应当做吨他为你。

all_dates = Model.order("date DESC").map(&:date) 
@months_in_year = all_dates.group_by{|x|x.year} 
@months_in_year.each_value {|months| months.map!{|m|m.month}.uniq!} 
@days_in_month = all_dates.group_by{|x|x.month} 
@days_in_month.each_value {|days| days.map!{|d|d.day}.uniq!} 
+0

嗨,对不起,好点...第一行应该是创建一个日期数组,而不是一组记录。现在修复。 – SteveTurczyn

+0

很好,它工作。谢谢! –