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), т.е. если задача должна быть выполнена.

Другие вопросы по тегам