Chewy Gem - запрос для получения диапазонов дат, содержащих конкретную дату
Я использую ElasticSearch с жевательным GEM на приложении Rails. Я хотел бы помочь, чтобы перевести это:
all.select { |task|
(task.start_at.to_date..task.end_at.to_date).cover?(Date.today)
}
использовать фильтр с жевательными. Я пытался сделать эту работу долгими часами, но безуспешно.
Любая помощь будет отличной.
Спасибо
2 ответа
Я знаю, что это было давно, но я сейчас работаю с жевательным камнем Chewy, так что вот оно:
Если у вас есть TasksIndex
с start_at
а также end_at
поля, четко определенные на date
введите и с правильным форматом:
field :start_at, type: 'date', format: 'basic_date_time_no_millis' # example, you can use other formats
field :end_at, type: 'date', format: 'basic_date_time_no_millis'
Тогда ваш фильтр может быть таким:
def tasks_including_date(target_date)
formatted_target_date = target_date.strftime('%Y-%m-%d')
TasksIndex.filter{start_at <= formatted_target_date}.filter{end_at >= formatted_target_date}
end
Тогда вы можете просто:
tasks_including_date(Date.today)
Если вы хотите сами результаты, а не просто отфильтрованную область, просто используйте to_ary
на результат. Это поможет вам с результатами.
Этот код перебирает коллекцию "все". Для каждого элемента он проверяет и возвращает истину, если сегодняшний день находится в пределах времени выполнения задачи (если сегодняшняя дата находится в диапазоне между begin_at и end_at), т.е. если задача должна быть выполнена.