Ich habe diese Suche in Rails 3:
Note.where(:user_id => current_user.id, :notetype => p[:note_type], :date => p[:date]).order('date ASC, created_at ASC')
Aber ich brauche die :date => p[:date]
Bedingung, um gleichberechtigt zu sein :date > p[:date]
. Wie kann ich das machen? Danke fürs Lesen.
where()
. Die Verwendungwhere()
entgeht automatisch der Eingabe.where()
Die Eingabe wird automatisch ausgeblendet, wenn sie in dem oben gezeigten Format mit Fragezeichen anstelle von Variablen verwendet wird, die anschließend im Funktionsaufruf aufgelistet werden. Es ist NICHT sicher, es auf diese Weise zu verwenden:Note.where("date > #{p[:date]}")
where("user_id = ?",current_user.id)
riskanter ist alswhere(user_id: current_user.id)
in Fällen, in denen Sie Modelle zusammenführen, die beide einuser_id
Feld haben. Wenn Sie die SQL-Notation verwenden, müssen Sie die Tabellenerklärungen selbst einfügen, zwhere("notes.user_id = ?",current_user.id)
.Wenn Sie auf Probleme stoßen, bei denen Spaltennamen nicht eindeutig sind, können Sie Folgendes tun:
quelle
Sie können versuchen, Folgendes zu verwenden:
Äquivalent in SQL
Das Ergebnis ist:
Und ich habe mich auch verändert
Zum
quelle
Rails 6.1 hat eine neue 'Syntax' für Vergleichsoperatoren unter
where
Bedingungen hinzugefügt , zum Beispiel:So kann Ihre Anfrage wie folgt umgeschrieben werden:
Hier ist ein Link zu PR, wo Sie weitere Beispiele finden.
quelle