2011-09-12 30 views
0

局部模板我有一个使用日历应用程序,我想提供登录日历摘要。摘要应被格式化,因此它显示了今天,明天的事件,而本周,就像这样:Rails的:分组基于属性

活动为:

今天

  • 事件1

明天

  • 事件2
  • 事件3
  • 事件4

本周

  • 事件5
  • 事件6
  • 事件7
  • 事件8

如何渲染偏色,以便根据日期以正确的方式将它们组合在一起?

回答

0

第一个可以添加一个模型方法for_dates(日期,结束日期),其中将包括: where([:date_column >= ? and :date_column <= ?, start_date, end_date])

然后使用:

Model.for_dates(Date.today, Date.today)

Model.for_dates(Date.today+1, Date.today+1)

默认 '周' 是星期天到星期一。如果您希望有不同的日子,请添加抵消

周一至周五是

Model.for_dates(Date.today.beginning_of_week+1, Date.today.end_of_week+1)

0

假设你的模式被称为Event,它有一个date属性,你的这些集合称为@events,这里有一个想法:在你看来将这个.. 。

<ul> 
<%= render @events, locals: { events: @events } %> 
</ul> 

...那么你将有一个所谓的部分是_event.html.erb看起来像这样:

<% last_event = event_counter == 0 ? nil : events[event_counter - 1] 
    next_event = events[event_counter + 1] 
%> 
<% if last_event && last_event.date != event.date 
    # add a new date header and start a new nested list of events 
%> 
    <li><h3><%= event.date %></h3> 
    <ul> 
<% end %> 

     <li><%= link_to event %></li> 

<% if next_event && next_event.date != event.date 
    # end the nested list and make way for the next date header and set of events 
%> 
    </ul> 
    </li> 
<% end %> 

什么happing是在render调用我们整个@events集合中传递作为本地被叫events。然后在部分内部,我们使用自动生成的event_counter方法查找集合中的前一个(events[event_counter - 1])和下一个(events[event_counter + 1])事件。那么如果当前event的日期与last_event的日期不同(意思是它是该日期的第一个日期),我们开始一个新的日期标题,如果日期event与日期next_event(日期即它是该日期的最后一个),我们结束该集合。

这有点难看,还有更多优雅的方法可以做到这一点,但它可以完成工作。