J'ai cette recherche dans Rails 3:
Note.where(:user_id => current_user.id, :notetype => p[:note_type], :date => p[:date]).order('date ASC, created_at ASC')
Mais j'ai besoin du :date => p[:date]
condition soit équivalente :date > p[:date]
. Comment puis-je faire ceci? Merci d'avoir lu.
where()
. Utiliserwhere()
échappe automatiquement l'entrée.where()
échappe automatiquement l'entrée lorsqu'elle est utilisée dans le format indiqué ci-dessus avec des points d'interrogation à la place des variables, avec celles-ci répertoriées par la suite dans l'appel de fonction. Il n'est PAS sûr de l'utiliser de cette manière:Note.where("date > #{p[:date]}")
where("user_id = ?",current_user.id)
est plus risquée quewhere(user_id: current_user.id)
dans les cas où vous fusionnez des modèles qui ont tous deux unuser_id
champ. En utilisant les moyens de notation SQL brutes vous devez inclure les clarifications de table vous - même, par exemple:where("notes.user_id = ?",current_user.id)
.Si vous rencontrez des problèmes où les noms de colonne sont ambigus, vous pouvez faire:
la source
Vous pouvez essayer d'utiliser:
équivalent en sql
Le résultat est:
Et j'ai changé aussi
Pour
la source
Rails 6.1 a ajouté une nouvelle `` syntaxe '' pour les opérateurs de comparaison dans les
where
conditions, par exemple:Ainsi, votre requête peut être réécrite comme suit:
Voici un lien vers PR où vous pouvez trouver plus d'exemples.
la source