Rails - comment faire une recherche basée sur un champ booléen? (Erreur MySQL)
Je suis en exécutant la requête suivante
@projects = @company.projects.where("active = ?", true).order("created_at ASC")
et j'obtiens le message d'erreur:
`ActiveRecord::StatementInvalid: Mysql::ParseError: You have an error in your SQL...`
l'erreur de points à la = '1'
.
J'ai essayé beaucoup de variations sur ma requête mais je ne peut pas comprendre le problème. Comment puis-je résoudre ce problème?
Pourrait essayer de la remplacer ("active = ?", true) with ("active = ?", 1). Même si je dois admettre que je n'ai pas une db MySQL en cours d'exécution pour le tester, mais le manuel ne mettre la valeur booléenne TRUE vers le bas comme un alias de l'entier 1 - l'erreur ressemble les Rails où l'instruction est en essayant de passer le " 1 " comme une chaîne de caractères?
OriginalL'auteur sscirrus | 2011-02-16
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin d'utiliser des requêtes paramétrées avec des littéraux, il suffit de faire ceci:
where("project.active = 1")
. Ce code supprime la ambiguation erreur dans SQL.Pas de problème - je suis content d'avoir pu aider! 🙂
Comme de Rails 4, je pense que cette requête doit être modifié pour 't' ou 'f'. À partir de rails de dbconsole dans mon projet,
SELECT distinct locked FROM widgets;
renvoie t & f. Donc,@projects = @company.projects.where("active = t").order("created_at ASC")
Ne fonctionne pas pour Postgresql. J'ai obtenu PG::UndefinedFunction: ERREUR: opérateur n'existe pas: boolean = integer '
OriginalL'auteur Jacob Relkin
Essayer:
(ça fonctionne aussi avec des chaînes "active").
Vous pouvez également regarder
http://guides.rubyonrails.org/active_record_querying.html#hash-conditions
pour plus de détails.
Il ya aussi une belle railscast à propos de ce qui explique pourquoi vous pourriez avoir des problèmes (je ne suis pas autorisé à poster des 2 liens de sorte que vous devez rechercher pour elle 🙂 )
OriginalL'auteur Calin