2013-02-12 71 views
1

这是我的问题,我会尽量简洁。太阳黑子 - 在多个日期范围内搜索

我有一个模型Coursehas_manyPlanning。 A Planning有一个start_date和一个end_date

我想检索(与太阳黑子)所有Courses有一个特定的start_dateend_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_dateend_date是夫妇。

有没有一种方法/技巧来存储范围?

回答

1

几乎具有

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搜索。

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 

```

+0

我会尽力! 我不能做第二个命题,因为我正在处理日期而不是时间。但有趣的把戏! – 2013-02-12 13:53:03