Ich muss Kommentare abfragen, die an einem Tag abgegeben wurden. Das Feld ist Teil der Standardzeitstempel, ist created_at
. Das ausgewählte Datum stammt von adate_select
.
Wie kann ich ActiveRecord
das machen?
Ich brauche so etwas wie:
"SELECT * FROM comments WHERE created_at BETWEEN '2010-02-03 00:00:00' AND '2010-02-03 23:59:59'"
1..1000000000000
Ich bin mir nichtscope :between, -> (a, b) { where(created_at: a..b) }
Ich würde persönlich einen Bereich erstellen, um ihn lesbarer und wiederverwendbarer zu machen:
In Ihrer Comment.rb können Sie einen Bereich definieren:
Dann zur Abfrage erstellt zwischen:
Ich hoffe es hilft.
quelle
#between?
, einen Bereich akzeptiert.Rails 5.1 führte eine neue Datumshilfemethode ein
all_day
, siehe: https://github.com/rails/rails/pull/24930Wenn Sie Rails 5.1 verwenden, sieht die Abfrage folgendermaßen aus:
quelle
require 'active_record'
und du bist fertig!Dieser Code sollte für Sie funktionieren:
Weitere Informationen finden Sie unter Zeitberechnungen
Hinweis: Dieser Code ist veraltet . Verwenden Sie den Code aus der Antwort, wenn Sie Rails 3.1 / 3.2 verwenden
quelle
date()
Funktion auf DB-Ebene beruht . Es ist möglicherweise db unabhängiger.Ich habe diesen Code ausgeführt, um festzustellen, ob die überprüfte Antwort funktioniert, und musste versuchen, die Daten zu vertauschen, um sie richtig zu machen. Das hat funktioniert--
Wenn Sie der Meinung sind, dass die Ausgabe 36 hätte betragen sollen, denken Sie daran, Sir, wie viele Tage sind 3 Tage für 3 Personen?
quelle
quelle
Ich habe die 3 Punkte anstelle von 2 verwendet. Drei Punkte geben Ihnen einen Bereich, der am Anfang offen und am Ende geschlossen ist. Wenn Sie also zwei Abfragen für nachfolgende Bereiche durchführen, können Sie nicht dieselbe Zeile zurückbekommen beide.
Und ja, immer schön, ein Zielfernrohr zu benutzen!
quelle
Wenn Sie nur einen Tag haben möchten, ist dies einfacher:
quelle
Es gibt verschiedene Möglichkeiten. Sie können diese Methode verwenden:
Oder dieses:
quelle
Ich denke, es sollte ein standardmäßiges aktives Datensatzverhalten geben. Das Abfragen von Daten ist schwierig, insbesondere wenn Zeitzonen betroffen sind.
Wie auch immer, ich benutze:
quelle
Sie können unten Edelstein verwenden, um die Datensätze zwischen Daten zu finden,
Dieses Juwel ist recht einfach zu bedienen und klarer. Von Star verwende ich dieses Juwel und die API klarer und die Dokumentation auch gut erklärt.
Hier könnten Sie auch unser Feld passieren
Post.by_month("January", field: :updated_at)
Bitte lesen Sie die Dokumentation und probieren Sie es aus.
quelle