Rails按日期过滤MetaSearch

时间:2011-11-21 20:45:55

标签: ruby-on-rails view filter meta-search

我在视图中显示了一些记录。他们有start_dateend_date。 当我访问视图时,默认情况下我希望它只显示日期未过期的记录。 过期被定义为:

  • 结束日期和开始日期< =现在和
  • 结束日期晚于开始日期

然后,我希望有一个复选框,显示所有记录,包括已过期的记录。

我该如何处理?

1 个答案:

答案 0 :(得分:0)

在您的控制器操作中,您希望将其放在某处:

params[:search] ||= {} # make sure this is instantiated

# filter to show the expired records
if params[:include_expired] # check if the checkbox is checked
  params[:search][:end_date_lte] = Date.today # end_date <= Now
  params[:search][:start_date_lte] = Date.today # end_date <= Now
end

@records = params[:include_expired] ? RecordClass.where("end_date > start_date").search(params[:search]) : RecordClass.search(params[:search])

您也可以绕过所有搜索内容,只使用这样的范围:

@records = params[:include_expired] ? RecordClass.expired : RecordClass.all # or whatever logic you need

# scope in the RecordClass
scope :expired, where("end_date > start_date AND end_date <= ?", Date.today)