2016-04-05 8 views
1

Ich versuche, Bücher ActiveRecord Objekte, die ein 'von oder' zu 'zwischen einem Datumsbereich (start_date..end_date) haben.ActiveRecord ODER Abfrage für Datumsbereich

Dieser Code funktioniert gut:

Book.where(from: start_date..end_date) 

Aber ich möchte verwenden 'oder' in meiner Erklärung und dieser Code nicht:

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

Bitte helfen Sie mir meine Fehler zu finden.

+0

welcher Fehler stehen Sie gegenüber? – uzaif

+1

[Kann Hilfe sein] (http://stackoverflow.com/q/31096009/3444240) – potashin

Antwort

1

Sie können versuchen, diese -

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

Es ist fast richtig. Ich bekomme SELECT 'Bücher'. * FROM' Bücher' WO (von BETWEEN '2016-02-01' UND '2016-02-29' ODER bis ZWISCHEN '2016-02-01' UND '2016-02-29') . Aber es fehlt noch ein kleiner Teil (sollte 'books' sein.von' BETWEEN ... AND ...) – Zelenka

+0

Kannst du deine Antwort irgendwie bearbeiten? – Zelenka

+0

@Zelenka ja, aktualisierte die Antwort. – dp7

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

'from' sollte kleiner sein als 'end_date' & 'to' sollte 'größer sein als' start_date 'auch, ich habe es in meiner Frage – Zelenka

+0

erklärt, dass Sie einen Scheck dafür definieren können –

1

die Rails guides auf Bereichsbedingungen prüfen:

Client.where(created_at: (Time.now.midnight - 1.day)..Time.now.midnight) 

Das wird die folgende SQL produzieren:

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

So gegeben in Sie könnenverwenden, können Sie

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

Notizen machen: Sie brauchen keine 5 Schienen zu verwenden, um diese OR Abfrage zu verwenden. Wir können es auch mit rails 4.2 verwenden, dank Edelstein where-or

Verwandte Themen