-1
私はレールアプリケーションを持っており、フィルタリング機能があります。フィルタリング基準の1つが時間値であり、時間基準でフィルタリングしようとすると間違った結果が表示され続けます。2つのRuby on Rails論理文の違いは何ですか?
**変数名に間違いはので、私は、私はフィルタリング機能を実行すると、結果は
start_time = DateTime.new(2000, 1, 1, 6, 0, 0)
end_time = DateTime.new(2000, 1, 1, 9, 0, 0)
を編集していた:
Item.where("(start_at >= ? AND start_at < ?) OR (end_at > ? AND end_at <= ?) OR (start_at < ? AND end_at > ?)", start_time, end_time, start_time, end_time, start_time, end_time)
=> Item id: 5931
しかし、この結果と私は同じ文を実行結果は次のようになります。
(Item.find(5931).start_at >= start_time AND Item.find(5931).start_at < end_time)
=> false
(Item.find(5931).end_at > start_time AND Item.find(5931).end_at <= end_time)
=> false
(Item.find(5931).start_at < start_time AND Item.find(5931).end_at > end_time)
=> false
(Item.find(5931).start_at >= start_time AND Item.find(5931).start_at < end_time) or (Item.find(5931).end_at > start_time AND Item.find(5931).end_at <= end_time) or (Item.find(5931).start_at < start_time AND Item.find(5931).end_at > end_time)
=> false
誰かがポイントを見つけることができますか? 必要な情報が不足している場合は教えてください。 2回の間でデータをSQL BETWEEN
キーワードを使用するためにクエリに
ませ鷹の目がなく、次のとおりです。Railsの4で
は、SQL文字列を記述する必要があります。
あなたがRailsの中
.or
方法5を使用することができOR句を追加するには'終わり 'は許されますか? Rubyの 'end'は予約語ではありませんか? – vee@vee間違いを申し訳ありません。変数名は異なっていましたが、わかりやすくするために変数名を変更しましたが、私は注意しませんでした。私は今これを変更します。 –
私が見ることができる基本的な違いは、条件に従ってデータをフェッチするSQLクエリを実行している最初のステートメントであり、2番目のステートメントでは特定のデータをフェッチして、Railsを使用してその属性をチェックしています。 – Deep