Рельсы фильтруют по дате с MetaSearch - PullRequest
1 голос
/ 22 ноября 2011

У меня есть несколько записей, которые я показываю в виде.У них есть start_date и end_date.Когда я получаю доступ к представлению, по умолчанию я хочу, чтобы оно показывало только записи, даты которых не истекли.Срок истек, определяемый как:

  • Дата окончания и дата начала <= Сейчас, и </li>
  • Дата окончания позже даты начала

Я хочуиметь флажок, который показывает все записи, включая те, которые просрочены.

Как мне подойти к этому?

1 Ответ

0 голосов
/ 17 января 2012

В вашем действии контроллера вы хотите иметь это где-то:

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)
...