2016-04-05 6 views
1

私は、日付範囲(start_date..end_date)の間に 'または'から 'を持つ書籍ActiveRecordオブジェクトを取得しようとしています。ActiveRecordまたはdaterangeのクエリ

このコードは正常に動作します:

Book.where(from: start_date..end_date) 

しかし、私は私の文で使う「か」したいと、このコードは失敗します。

Book.where("from: ? OR to: ?", (start_date..end_date), (start_date..end_date)) 

私のミスを見つけるために私を助けてください。

+0

どのようなエラーがありますか? – uzaif

+1

[ヘルプの可能性があります](http://stackoverflow.com/q/31096009/3444240) – potashin

答えて

1

あなたはこれを試すことができます -

Book.where("books.from BETWEEN ? AND ? OR books.to BETWEEN ? AND ?", start_date,end_date,start_date,end_date) 
+0

それはほぼ正しいです。 * SELECTから 'books'を取得します。* FROM' books' WHERE(BETWEEN '2016-02-01 AND AND' 2016-02-29 OR OR BETWEEN '2016-02-01 AND AND' 2016-02-29) 。しかし少しの部分がまだ欠けている( 'books'.from'between ... AND ...) – Zelenka

+0

あなたはあなたの答えをどうにか編集できますか? – Zelenka

+0

@Zelenkaはい、答えを更新しました。 – dp7

0
if from < to 
    Book.where("from >= #{start_date} OR to <= #{end_date}") 
else 
    // do something else 
end 
+0

'from'は 'end_date'より小さい必要があります '&' to 'は' start_date 'よりも大きくなければなりません。私の質問で説明しました – Zelenka

+0

これを行うためのチェックを定義することができます –

1

レンジ条件にRails guidesを確認してください:

次のSQLを生成します
Client.where(created_at: (Time.now.midnight - 1.day)..Time.now.midnight) 

:だからで与え

SELECT * FROM clients WHERE (clients.created_at BETWEEN '2008-12-21 00:00:00' AND '2008-12-22 00:00:00') 

を使うことができますは、あなたが

Book.where(from: start_date..end_date).or(Book.where(from: new_start_date..new_end_date)) 

ノートを行うことができます:あなたはこのORクエリを使用するレール5を使用する必要はありません。 rails 4.2、宝石のおかげでそれを使用することもできますwhere-or