我有一个有很多日期的活动模型。
我列出了下周的事件,并希望按日对事件进行分组,并仅显示已发布的事件。我有以下代码,它可以工作,但它仍然包括未发布的事件。
Date.all.group_by {|d| d.date.at_beginning_of_day }.each do |datestr, dates|
理想情况下,我希望有这样的东西......
@events = Event.find(:all, :conditions => {:published => true})
@events.group_all_dates_by_day.each do |datestr, dates|
我该怎么做?
修改
这是我想做的,但我不喜欢这些代码。
@events = Event.find(:all, :conditions => {:published => true})
ids = @events.map { |event| event.dates.map { |date| date.id }.join.to_i}
Date.find(ids).group_by {|date| date.date.at_beginning_of_day }
答案 0 :(得分:1)
做这样的事情:
@published_events = Event.select("events.*, dates.date AS date_of_event")
.joins(:dates) # you join dates table to sort the events by date
.where(:published => true) # here you take only published events
.order("dates.date ASC") # here you order them
在您的观看中,您会执行类似
的操作@published_events.each do |event|
<p><%= event.id %></p>
<p><%= event.name %></p>
<p><%= event.date_of_event %></p>
end
注意 - &gt;您没有指定列的确切名称,所以我猜测您的事件有名称,或者您的日期表有列调用日期。
我希望这很有用!
编辑:
如果你想按日期对它们进行分组,在从数据库中检索它们之后(这非常重要),你确实可以使用group_by
(group by is located in Enumerable/group_by)这样
@published_events.all.group_by(&:date_of_event)
如果你喜欢这样,你最终会得到一个散列,其中每个键都是一个日期,该键的相应值是一系列事件