0

参考までに、この質問は行き詰まっていたので、解決に協力してくれたすべての人に感謝します。

イベントの長さがさまざまな予約プログラムで、イベントの潜在的な衝突を見つけようとしています。

(a ≤ x && e ≥ y) || (a ≥ x && e ≤ y) || (a ≤ x && e ≤ y) || (a ≥ x && e ≥ y)

これを達成するために DataMapper を使用していますが、以前のクエリは間違っていました。次に、上記を理解しましたが、それをクエリに変換する方法がわかりません。以下は、参照用の私の間違ったクエリです。

class Table
  def is_available?
     return false if (TableBooking.all(:at.lte => params[:at], :at.gt => params[:ending], :ending.gt => params[:at], :ending.gte => params[:at]).count > 0)
  end
end
4

2 に答える 2

2

あなたが実際に欲しいのはこれだと思います:

(a ≤ x && e ≥ y) || (a ≥ x && e ≤ y) || (a ≤ x && e ≥ x) || (a ≤ y && e ≥ y)

ということで(上から順番に各グループに対応)…

  1. a,e には x,y が含まれます
  2. a,e は x,y に含まれる
  3. a,e は x,y より前に開始しますが、x,y より前に終了しません
  4. a,e は x,y の後に終了しますが、x,y の後に開始しません

最初の 2 つの部分は元の部分と同じですが、意味を正しくするために、次の 2 つの部分を変更する必要がありました。

#3 と #4 は自動的に #1 をキャッチするので、実際には #2-4 だけが必要なので、これも単純化できます。

(a ≥ x && e ≤ y) || (a ≤ x && e ≥ x) || (a ≤ y && e ≥ y)
于 2010-01-02T23:09:21.387 に答える
0

あなたが与えた不等式は、

(a ≤ x || a ≥ x) && (e ≤ y || e ≥ y)  

これはさらに簡略化できます

True

それがおそらくコードが機能しない理由です。

于 2010-01-02T23:07:59.967 に答える