我在Rails应用程序上使用具有耐嚼的GEM的ElasticSearch。我会帮助一些翻译:耐嚼宝石 - 查询获取包含特定日期的日期范围
all.select { |task|
(task.start_at.to_date..task.end_at.to_date).cover?(Date.today)
}
使用耐嚼的过滤器。我试着长时间做这项工作,但没有成功。
任何形式的帮助都会很棒。
谢谢
我在Rails应用程序上使用具有耐嚼的GEM的ElasticSearch。我会帮助一些翻译:耐嚼宝石 - 查询获取包含特定日期的日期范围
all.select { |task|
(task.start_at.to_date..task.end_at.to_date).cover?(Date.today)
}
使用耐嚼的过滤器。我试着长时间做这项工作,但没有成功。
任何形式的帮助都会很棒。
谢谢
此代码迭代集合“全部”。对于它检查的每个项目,如果today是在任务的执行时间范围内(它的当前日期介于begin_at和end_at范围之间),即如果任务应该执行,则返回true。
我知道它是一个漫长的时间,但我现在与耐嚼的宝石的工作,所以这里有云:
假设你有一个TasksIndex
与start_at
和良好定义为date
类型end_at
领域,用正确的format:
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
。它会处理你的结果。
是的,这就是代码的作用。我会将其翻译为elasticsearch查询。 – elf 2014-12-13 12:49:10
UsersIndex.filter {〜(start_at.to_date <= Date.today)&(end_at.to_date> = Date.today)} – 0e1val 2014-12-13 13:31:02