2

これが私の問題です、私は簡潔にしようとします。

私はそのモデルを持ってCoursehas_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は実際には日付ではなく、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で検索する場合。

于 2013-04-08T18:23:58.263 に答える
0

2回でクエリを実行する可能性があります。最初に計画を見つけ、次に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 に答える