耐嚼宝石 - 查询获取包含特定日期的日期范围

时间:2014-12-13 00:28:20

标签: ruby-on-rails ruby elasticsearch chewy-gem

我在Rails应用程序上使用带有耐嚼GEM的ElasticSearch。我会帮助翻译一下:

all.select { |task|
 (task.start_at.to_date..task.end_at.to_date).cover?(Date.today)
}

使用耐嚼过滤器。我试着长时间工作,没有成功。

任何形式的帮助都会很棒。

由于

2 个答案:

答案 0 :(得分:1)

我知道它已经很长时间了,但我现在正在与耐嚼的宝石合作,所以在这里:

假设您的TasksIndex start_atend_at字段已明确定义为date类型并且正确 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即可。它会处理你的结果。

答案 1 :(得分:0)

此代码遍历集合&#34; all&#34;。对于每个项目,它检查并返回true,如果今天在任务的执行时间范围内(今天的日期在begin_at和end_at范围之间),即应该执行任务。