2014-06-21 3 views
0

En essayant de trouver la bonne façon de procéder. L'idée est d'apprendre/comprendre comment faire des recherches avec des informations partielles. Comme si je recherchais 500 noms d'utilisateur pour tous ceux qui ont "Test" dans le nom d'utilisateur. (exemples "Test Same", "Ron Test", etc)console User.where ("nom d'utilisateur LIKE?", "% Test%")

Pour ce qui suit, je suis dans les moyens de test de la console pour trouver des données. User.all renvoie toutes les données pour tous les utilisateurs. Je veux retourner toutes les données pour les utilisateurs dont le nom d'utilisateur inclut "Test".

Alors je l'ai fait ce qui suit dans la console

User.all 

a rendu un tableau avec des paires clé/valeur de tous les utilisateurs et les informations connexes. 2 Les utilisateurs avaient un nom d'utilisateur qui avait "Test" dans le nom d'utilisateur. Donc j'ai essayé de retourner juste ces 2 utilisateurs comme ceci:

User.where("username LIKE ?", "%Test%") 

Pas de chance avec cette commande dans la console. Tout ce qu'il retourne est le suivant:

#<Sequel::SQLite::Dataset: "SELECT * FROM `users` WHERE (username LIKE '%Test%')"> 

Juste au cas où il importe, j'utilise Ruby 1.9.3, et Ramaze mais je pense que les réponses s'appliqueraient toujours à l'aide de rails.

Répondre

1

Je pense que vous êtes presque là. Sequel renvoie un DataSet pouvant être enchaîné à d'autres sélections, projections, jointures, etc. Cela créerait plus de SQL, donc il ne serait pas encore entré dans la base de données. Si vous voulez y aller avec la requête en cours, vous pouvez simplement appeler .all ou .first pour obtenir le résultat de l'appel réel. Pour obtenir le tableau, il vous suffit d'enchaîner vos deux appels comme dans

User.where("username LIKE ?", "%Test%").all 

C'est vraiment si simple.

0

Essayez ceci dans la console ...

selected_users = User.where("username LIKE ?", "%Test%") 

selected_users.each{|u| p u.username} 

... et je pense que vous serez agréablement surpris. La suite n'est pas exécutée tant que vous n'avez pas tenté d'accéder aux enregistrements.

+0

Merci pour votre réponse. Je suis allé avec le dessus de @Patru car c'est ce que j'essayais de faire. Il me manquait juste la chaîne .all à la fin. – jtlindsey

Questions connexes