Wie soll ich die bedingte Anweisung schreiben, wenn ich alle heute erstellten Datensätze abrufen möchte?
ruby-on-rails
date
rails-activerecord
Victor Lam
quelle
quelle
Post.where("created_at >= ?", Time.zone.now.beginning_of_day)
es sehr klug ist, würde ich unterstützenPost.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)
. Es gibt einen Grund, wie Sie die Zeit manipulieren können. Wenn Sie beispielsweise testen, werden Sie wahrscheinlich die Zeit manipulieren, und dann funktioniert die erste Option nicht. Sie möchten diese Art von zukünftigem möglichen Fehler vermeiden, der wahrscheinlich einige Debug-Zeit in Anspruch nehmen wird.Ich weiß, dass diese Frage eine akzeptierte Antwort hat. Die in der akzeptierten Antwort vorgeschlagene Lösung kann zu Leistungsproblemen führen, wenn die Tabellengröße zunimmt.
Wenn Sie Suchvorgänge basierend auf
created_at
Spalten durchführen, fügen Sie in der Regel einen Index für die Tabelle in Ihrer Migrationsdatei hinzu.So suchen Sie nach heute erstellten Datensätzen:
Schienen 3/4
Zum Nachschlagen von Posts, die an einem bestimmten Tag erstellt wurden.
--------- ODER -------------
Fügen Sie Ihrem Modell eine statische Methode hinzu
Schienen 2
--------- ODER -------------
Fügen Sie Ihrem Modell ein named_scope hinzu
quelle
scope
Beispiel in diesem Beitrag nur für Rails 3 gilt, da es so aussieht, als ob es sich unter der Überschrift Rails 2 befindet. In Rails 2 müssten Sienamed_scope
eher als verwendenscope
. In Rails 3 können Sie auch eine Klassenmethode verwenden,def self.today where("created_at >= ?", Time.now.beginning_of_day) end
die wahrscheinlich sauberer ist als die Verwendung eines Bereichs in diesem Fall, da Sie auf das Lambda verzichten können.MySQL:
PostgreSQL:
quelle
Mohit Jains Antwort für Rails3 angepasst
quelle
Rails 5.1 hat einen
all_day
Helfer, der hier nützlich ist.oder
quelle
Post.where(created_at: Time.zone.now.beginning_of_day..Time.zone.now.end_of_day)
Dieser "Namescopes" das Attribut mit dem
table_name
.quelle
model.rb
posts_controller.rb
quelle
between_period
sieht interessant aus. Ich habe keine Dokumentation dafür gefunden. Können Sie einen Link angeben? Wie wählen Schienen die Spalte zum Vergleich aus?Aus irgendeinem Grund funktionierte keine der anderen Lösungen in diesem Beitrag oder andere in StackOverflow für mich (unter Verwendung von Rails 4.2.4 und Ruby 2.2.3p173). Dies ist die einzige Abfrage, die ich mit meiner Postgres-Datenbank bearbeiten konnte:
quelle
Abfragen von Datensätzen, die ab heute erstellt wurden
Verwenden Sie den Bereich mit arel
Dann können wir es benutzen
quelle
where('created_at >= now()')
würde nur Elemente finden, bei denen das created_at in der Zukunft war..lteq(Time.zone.now.end_of_day))
.Verwenden Sie in Rails 4.2.3 zum Abrufen der heute mit MySQL erstellten Datensätze Folgendes.
@usergoals = Goal.where ("Benutzer-ID =: Benutzer-ID und Datum (Erstellt_at) =: Datum", {Benutzer-ID: Parameter [: ID], Datum: Datum.Today})
Hier verwende ich mehrere Bedingungen, wenn Sie möchten, können Sie es für eine einzelne Bedingung bearbeiten.
quelle