Rails: Comment lister les tables / objets de la base de données à l'aide de la console Rails?

148

Je me demandais si vous pouviez lister / examiner les bases de données / objets disponibles dans la console Rails. Je sais que vous pouvez les voir en utilisant d'autres outils, je suis juste curieux. Merci.

rtfminc
la source
2
c'est à cela que sert script / dbconsole
hgmnz
Oui, cela vous dépose dans mysql (ou autre). Pour une raison étrange, je veux lister les colonnes / tables, etc. de la console normale. Je pense que cela pourrait nécessiter des méthodes de rubis personnalisées pour faire une telle chose.
rtfminc

Réponses:

305

Vous recherchez probablement:

ActiveRecord::Base.connection.tables

et

ActiveRecord::Base.connection.columns('projects').map(&:name)

Vous devriez probablement les envelopper dans une syntaxe plus courte dans votre fichier .irbrc.

cwninja
la source
3
Merci, le premier fonctionne comme je le souhaite. Mais le second ne le fait pas - il a cherché quelque chose de similaire mais pas de chance.
rtfminc
12
ActiveRecord :: Base.connection.columns ("foos") devrait également fonctionner, mais il renvoie des objets de colonne, .map {| c | [c.name, c.type]} à la fin corrige cela.
cwninja
27
table_structuresemble être spécifique à l'adaptateur sqlite.
Kelvin
4
Pour Rails4, utilisez Model.column_names pour répertorier les colonnes de la table
Stephen Provis
4
Toujours dans Rails 4, vous pouvez simplement utiliser ModelName pour obtenir une liste des colonnes et de leurs types de données.
themattkellyshow
20

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

rails db

pretty print votre sortie de requête

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

Montrez les tableaux

.table

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

jambon de hamster
la source
7
'rails dbconsole' vous met dans l'interpréteur de ligne de commande (CLI) du moteur de base de données que vous utilisez ... les commandes ci-dessus sont SQLite ... Postgres, par exemple, utiliserait '\ dt' pour lister les tables ...
Tom Hundt
existe-t-il un moyen de s'assurer que chaque fois que vous ne devez pas appliquer .headers sur et .more colonnes lors de l'exécution de rails db
Mark
7

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

ActiveRecord::Base.subclasses.map { |cl| cl.name }
ActiveRecord::Base.subclasses.find { |cl| cl.name == "Foo" }
DomQ
la source
1
Aussi:ActiveRecord::Base.descendants.map(&:name)
valk
4

Vous pouvez utiliser rails dbconsolepour 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.

Ralf Rafael Frix
la source
0

Lance ça:

Rails.application.eager_load! 

ensuite

ActiveRecord::Base.descendants

Pour renvoyer une liste de modèles / tables

stevec
la source
-3

C'est un début, il peut lister:

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

En regardant un peu plus ...

rtfminc
la source
3
en faisant cela, vous listez simplement les fichiers de modèles et si les tables existent dans la base de données et n'ont pas de modèle fild dans le répertoire des modèles !!
abo-elleef