N'est pas égale à conditionnelle
Je veux avoir une clause where d'égal à égal et n'est pas égale à condition:
@user = User.where(:user_id => current_user.id, :author_id != current_user.id).nil? ? (render :something) : (render :somethingelse)
Le ci-dessus ne fonctionne pas:
syntax error, unexpected ')',
attend tASSOC ...d, :user_id !=
current_user.id).néant? ? (render
:index) : (re...
Si je change la deuxième condition de !=
à =>
cela va fonctionner, cependant.
Comment puis-je avoir les deux conditions en une où la clase? Merci
- J'ai terminé "Ruby on Rails Tutoriel: Apprendre Rails par Exemple" cette semaine, mais il ne couvre pas ce genre de conditions, donc je suis encore à apprendre. Elle aussi m'a suggéré de commencer avec des Rails avant de passer à Ruby. Mais je vous remercie pour vos commentaires.
- vous devez utiliser
empty?
au lieu denil?
parce quewhere
retourne un Tableau en soi.
Vous devez vous connecter pour publier un commentaire.
Voici comment vous pouvez l'utiliser Arel pour générer la requête "
select * from users where user_id = ? and author_id != ?
":À l'aide Arel n'est pas aussi concis que l'utilisation de Hachage conditions pour des conditions simples, mais il est beaucoup plus puissant!
Voici un lien vers le liste complète des prédications (
eq
,not_eq
,gt
,lt
, etc.) disponible avec Arel.!=
mais d'autres le feront.Je crois, il devrait être:
Rails 4 a ce tout compris
L'erreur de syntaxe est due à vous de tenter de l'utiliser
!=
au lieu de=>
. Lewhere
méthode ne prend pas en charge les inégalités hachée avec des arguments, de sorte que votre pas égal devra être écrite en utilisant des arguments de type tableau.http://guides.rubyonrails.org/active_record_querying.html#hash-conditions
Vous devez déroulant à droite SQL ou inverser et arel requête, voir Est-il un moyen pour inverser une ActiveRecord::Rapport de la requête?
Ne sais pas si vous êtes au courant, pas l'égalité de condition généralement ne correspond pas (author_id) les valeurs NULL. Vous aurez à faire un
OR author_id IS NULL
si vous voulez.Notez également que je suis en utilisant
@users.present?
parce quewhere
finder retourne unActiveRecord::Relation
tableau.