2

这是我的问题,我会尽量简洁。

我有一个Course模型has_many Planning。APlanning有一个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_date并且end_date是夫妻。

有没有办法/技巧来存储范围?

4

2 回答 2

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

于 2013-04-08T18:23:58.263 回答
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

```

于 2013-02-12T13:30:30.743 回答