2017-03-11 3 views
1

Ich habe ein Modell mit planting_date_begin und planting_date_end. Ich möchte alle Datensätze abzurufen, wo jedes Datum in planting_date_begin..planting_date_end Überlappung mit dem Bereich für die current_weekRails 5 aktive Datensatzabfrage wo Datumsbereich mit anderen Datumsbereich überlappt

Beispiel: wenn planting_date_begin: 2017.03.05 und planting_date_end: 3-12/2017 und diese Woche ist 26.03/2017-4/1/2017 ist es in der Abfrage nicht enthalten.

wenn planting_date_begin: 01.03.2017 und planting_date_end: 4/15/2017 würde es enthalten sein.

I set current_week Bereich:

today = Date.today 
days_in_week = today.at_beginning_of_week..today.at_end_of_week 

Diese Syntax ist nicht richtig, aber ich will, wie etwas zu tun ist:

Planting.where((planting_date_begin..planting_date_end).overlaps?(days_in_week)) 

Was für eine prägnante Art und Weise, dies zu umgehen? Übrigens benutze ich postgres für den Fall, dass es anders geht.

Antwort

2

Vielleicht nicht so knapp, aber ich habe dies in einem aktuellen Projekt viel zu tun, und meine Methode ist ...

start_date = Date.today.at_beginning_of_week 
end_date = Date.today.at_end_of_week 

@plantings = Planting.where('planting_date_end >= ? AND planting_date_begin <= ?', start_date, end_date) 

Dies umfasst alle Überlappungen .. wenn Bepflanzung vor dem Bereich beginnt und endet nach der Bereich, wenn die Bepflanzung während des Bereichs beginnt, wenn die Bepflanzung während des Bereichs endet.

+0

danke - so viel einfacher als wo ich hingehen würde –