对事件进行排序以显示本周,月等

时间:2014-03-10 19:17:34

标签: ruby-on-rails-4

我有一个事件列表,但我很难弄清楚如何在索引视图中显示特定的日期范围。

我想通过今天,本周,本月等展示活动来列出活动。

我是rails的新手,所以我尝试使用这个网站,我想出了以下适用于今天活动的内容。

@events_today = Event.find(:all, :conditions => ["date between ? and ?", Date.today, Date.tomorrow])

但我不确定如何将页面设置为自动更新并仅显示本周事件和本月。

2 个答案:

答案 0 :(得分:1)

您的基本查询应该是这样的:

Event.where(date: date_range)

现在,在调用此查询之前,您可以设置日期范围变量。如果你只想要本周:

date_range  = Date.today.beginning_of_week..Date.today
Event.where(date: date_range)

现在你可以做各种各样的事情。您可以使用表单或下拉选择选择开始日期和结束日期或自定义期间。在这种情况下,date_range是根据你的参数设置的。您也可以始终使用一个预定义的时间段。

如果您想使用多个日期范围周期,那么在您的模型(或关注点)中拥有last_week,last_month等范围可能会很不错。或者您可以在初始化程序中定义date_range常量。

答案 1 :(得分:0)

根据我的理解,您希望在点击“周”或“月”标签时显示一周或一个月的所有活动。

当你点击一个月或一周来获取事件时,你只需要在params中发送一个月或一周(假设params [:events_in]持有'week'或'month')

对params的这个属性进行检查

def get_events_in_week_or_month
  if params[:events_in] =='week'
    start_date_of_time_period = Date.today.beginning_of_week
    end_date_of_time_period = Date.today.end_of_week
  else
    start_date_of_time_period = Date.today.beginning_of_month
    end_date_of_time_period = Date.today.end_of_month
  end

  #events in descending order
  @events = Event.where("date between ? and ? ", start_date_of_time_period, end_date_of_time_period).order("created_at DESC")

  #events in ascending order
  @events = Event.where("date between ? and ? ", start_date_of_time_period, end_date_of_time_period)
end

要获取更多日期类方法,您应该在rails console上运行以下命令:

 Date.public_methods