这是我的问题,我会尽量简明扼要。
我有Course
has_many
的模型Planning
。
Planning
有一个start_date
和一个end_date
。
我想检索(使用太阳黑子)在给定Courses
和start_date
之间进行特定规划的所有end_date
。
问题在于,如果我存储在模型中Course
:
searchable do
date :start_date, multiple: true do
plannings.map(&:start_date)
end
date :end_date, multiple: true do
plannings.map(&:end_date)
end
...
end
我忽略了start_date
和end_date
是夫妻的事实。
是否存在存储范围的方式/技巧?
答案 0 :(得分:1)
几乎有同样的问题,在我的情况下,start_date和end_date实际上不是一个日期,只是一年(整数),用多个值字段作为范围解决它:
searchable do
date :course_date, multiple: true do
plannings.map{|p| (p.start_date..p.end_date).to_a}
end
...
end
所以course_date包含课程进行的所有年份。如果您有2001-2003和2005-2007(2001,2002,2003,2005,2006,2007)并使用equal_to进行搜索。
答案 1 :(得分:0)
可能是两次进行查询。首先查找计划,然后找到按ID限制课程的课程。
也许不是一个非常优化的,但为什么要尽快优化......
或使用函数索引小时数:
def happens_between_8_and_9
return true if start_date > 8..
end
searchable do
boolean :happens_between_8_and_9
boolean :happens_between_9_and_10
end
```