2010-01-19 4 views
116

Je me demandais si vous pouviez lister/examiner quelles bases de données/objets sont disponibles dans la console Rails. Je sais que vous pouvez les voir en utilisant d'autres outils, je suis juste curieux. Merci.Rails: Comment lister les tables/objets de base de données à l'aide de la console Rails?

+2

c'est ce que script/dbconsole est pour si – hgmnz

+0

Oui, cela vous laisse tomber dans mysql (ou quoi que ce soit). Pour une raison inconnue je veux lister les colonnes/tables etc de la console régulière. Je pense que cela pourrait exiger des méthodes ruby ​​sur mesure pour faire une telle chose. – rtfminc

Répondre

239

Vous cherchez probablement:

ActiveRecord::Base.connection.tables 

et

ActiveRecord::Base.connection.table_structure("projects") 

Vous devrait probablement envelopper dans plus court s yntax à l'intérieur de votre .irbrc.

+3

Merci, le premier fonctionne comme je le veux. Mais le second ne cherche pas quelque chose de similaire mais pas de chance. – rtfminc

+12

ActiveRecord :: Base.connection.columns ("foos") devrait aussi fonctionner, mais il retourne les objets de la colonne, .map {| c | [c.nom, c.type]} à la fin corrige cela. – cwninja

+23

'table_structure' semble être spécifique à l'adaptateur sqlite. – Kelvin

-4

Son un début, il peut la liste:

models = Dir.new("#{RAILS_ROOT}/app/models").entries 

Vous cherchez un peu plus ...

+2

en faisant cela vous suffit de lister les fichiers modèles que se passe-t-il si les tables existent en db et n'ont pas de modèle fild dans le répertoire des modèles !! –

7

Pour obtenir une liste de toutes les classes de modèle, vous pouvez utiliser ActiveRecord::Base.subclasses par exemple.

ActiveRecord::Base.subclasses.map { |cl| cl.name } 
ActiveRecord::Base.subclasses.find { |cl| cl.name == "Foo" } 
+1

Aussi: 'ActiveRecord :: Base.descendants.map (&: nom)' – valk

12

J'espère que ma réponse tardive peut être utile.
Cela ira à la console de base de données de rails.

rails db 

enluminer votre sortie de la requête

.headers on 
.mode columns 
(turn headers on and show database data in column mode) 

Afficher les tables

.table 

'.help' pour voir l'aide.
Ou utilisez des instructions SQL telles que 'Select * from cars'

+4

'rails dbconsole' vous place dans l'interpréteur de ligne de commande (CLI) de n'importe quel moteur de base de données que vous utilisez ... ce qui précède sont des commandes SQLite. Postgres, par exemple, utiliserait '\ dt' pour lister les tables ... –

+0

est-il un moyen de s'assurer que chaque fois que vous n'avez pas à appliquer .headers sur et .more colonnes lors de l'exécution des rails db – Mark

0

Vous pouvez utiliser rails dbconsole pour afficher la base de données utilisée par votre application rails. C'est une réponse alternative rails db. Les deux commandes vous dirigeront vers l'interface de ligne de commande et vous permettront d'utiliser cette syntaxe de requête de base de données.

Questions connexes