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.


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.


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'


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" }

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.


0

Lance ça:

Rails.application.eager_load! 

ensuite

ActiveRecord::Base.descendants

Pour renvoyer une liste de modèles / tables


-3

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

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

En regardant un peu plus ...


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.