2016-05-10 11 views
0

Ich fragte mich, ob jemand mit dieser ActiveRecord-Abfrage helfen konnte. Ich habe Ereignisse, die ein Start- und Enddatum haben. Ich wollte einen Cron Job haben, der jeden Donnerstag am kommenden Wochenende alle Events bekommt. wieRails, ActiveRecord, Suche nach allen Ereignissen, die am Wochenende fallen

Etwas ...

@events = Event.where("start_date <= ?", (Date.today + 3.days)).where("end_date >= ?", (Date.today + 3.days)) 

ich die oben wissen, ist falsch, aber jemand der Hoffnung, vielleicht mich auf einen einfacheren Weg aufklären können die Ereignisse für diese Abfrage ... Vielen Dank im Voraus zu finden!

Antwort

1

Wenn ich versuchen, Ihre Frage zu einem Algorithmus Ich denke, zu übersetzen, dass Sie was danach ist: alle Veranstaltungen, die die start_datewährend oder vor kommenden Wochenende (dh bevor das Wochenende endet) und die end_datewährend oder nach das kommende Wochenende (dh nach dem Wochenende beginnt). Auf diese Weise werden wir Ereignisse finden, die zumindest teilweise die Wochenendtage abdecken.

Wenn Sie Ihre Rake donnerstags laufen, dann kann das nächste Wochenende, da dies abgerufen werden:

weekend_start = Date.today.end_of_week - 1 # the Saturday's date 
weekend_end = Date.today.end_of_week  # the Sunday's date 

Damit die Abfrage ist einfach:

@events = Event.where("start_date <= ? AND end_date >= ?", weekend_end, weekend_start) 

Wenn Ihre start_date und end_date Spalten Wären nicht DATEN, sondern DATETIME Spalten, müssten Sie den Anfang und das Ende des Wochenendes wie folgt definieren:

weekend_start = Time.zone.now.end_of_week.midnight - 1.day # 00:00 at Saturday 
weekend_end = Time.zone.now.end_of_week     # 23:59 at Sunday 

Die Definitionen verwenden Time.zone, um die Zeiten in der lokalen Zeitzone zu berechnen.

+0

Danke für den Vorschlag! Zur Vereinfachung und zum besseren Verständnis habe ich die @BoraMa-Lösung verwendet. Löschen und erhält die richtige Abfrage! Vielen Dank! =) – gitastic

1

Wir können start time und end time der nächsten Wochenenden finden, so wird die Abfrage danach einfach sein.

# Start weekends time 
start_next_saturday = Date.today.end_of_week.at_beginning_of_day - 1.days 
# End weekends time 
end_next_sunday  = Date.today.end_of_week.at_end_of_day 

arel_table = Event.arel_table 
@events = Event.where(arel_table[:start_date].lteq(end_next_sunday) 
          .and(arel_table[:end_date].gteq(start_next_saturday))) 

Btw, Date.today + 3.days vielleicht ein falscher Ansatz, findet so die Wochenenden Zeit mit obiger Logik genauer ist!

+0

Dies findet die Ereignisse am * letzten * Wochenende, während das OP das * kommende * Wochenende wünscht. Und warum AREL? – BoraMa

+0

Ah ha, danke für den Vorschlag, nur eine Option zur Abfrage –

+0

Dank HieuPham! Ihre Lösung ist praktikabel, aber aufgrund der Einfachheit wurde BoraMa verwendet. Danke für deine Zeit – gitastic

0

versuchen diese

Event.where(created_at: (Date.today.end_of_week-1..Date.today.end_of_week)) 
Verwandte Themen