2010-03-02 6 views
3

Je souhaite effectuer une recherche parmi les utilisateurs dont l'attribut show est true.Syntaxe correcte pour la condition booléenne dans la recherche

show = true 
@users = User.find(:all, 
       :conditions => ["show = ?", show]) 

Cela ne semble pas fonctionner pour moi.

+0

Pouvez-vous publier votre schéma de table utilisateur? –

+0

class CreateUsers "1" .... – chief

Répondre

1

La syntaxe me semble correcte.

Que révèle votre fichier development.log? La requête SQL devrait apparaître ici comme exécutée.

+0

Voici l'erreur: ActiveRecord :: StatementInvalid (Mysql :: Error: Vous avez une erreur dans votre syntaxe SQL, consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près de 'show = 1) – chief

3

Essayez une version alternative de la requête:

User.find_all_by_show(true) 

Assurez-vous que la table users a une colonne tinyint(1) (à savoir boolean) appelé show.

J'ai déjà vu ce comportement auparavant. J'ai dû utiliser 1/0 pour truefalse pour les conditions de tableau. Essayez ceci:

show = 1 
@users = User.find(:all, 
       :conditions => ["show = ?", show]) 
+0

Oui cela fonctionne, en utilisant la console. – chief

+0

Je préfère utiliser l'autre sens, car j'ai d'autres conditions dans la recherche. – chief

+0

J'ai mis à jour ma réponse. Essayez la deuxième méthode que j'ai proposée dans ma réponse. –

5

Votre exemple devrait certainement fonctionner. Si vous utilisez une ancienne version de rails, vous devrez peut-être redémarrer votre serveur.

Une autre option est d'utiliser la syntaxe de hachage comme ...

@users = User.find(:all, :conditions => {:show => true}) 

Ensuite, vous pouvez simplement ajouter vos autres conditions dans le hachage.

+0

Ce hash fonctionnera pour moi. – chief

0

quelle base de données utilisez-vous? mysql ou sqlite?

Dans les valeurs booléennes mysql sont stockées sous forme de 1 et 0 et il diffère avec d'autres bases de données, donc dans votre migration que vous avez spécifié la valeur par défaut est 1.

S'il vous plaît vérifier à nouveau et essayer à nouveau. Comme Toby Hede a dit que vous pouvez vérifier la requête générée dans le journal et essayer d'exécuter cette requête dans votre navigateur de requête ou quoi que ce soit et voir si vous obtenez les résultats attendus.

Questions connexes