web-dev-qa-db-fra.com

ActiveRecord: liste les colonnes dans la table à partir de la console

Je sais que vous pouvez demander à ActiveRecord de lister les tables dans la console en utilisant:

ActiveRecord::Base.connection.tables

Y a-t-il une commande qui listerait les colonnes d'une table donnée?

101
Andrew

Ceci listera les noms de colonne d'une table

Model.column_names
e.g. User.column_names
201
Pravin

Cela récupère les colonnes, pas seulement les noms de colonnes, et utilise ActiveRecord :: Base :: Connection. Aucun modèle n'est donc nécessaire. Pratique pour sortir rapidement la structure d'une base de données.

ActiveRecord::Base.connection.tables.each do |table_name|
  puts table_name
  ActiveRecord::Base.connection.columns(table_name).each do |c| 
    puts "- #{c.name}: #{c.type} #{c.limit}"
  end
end

Exemple de sortie: http://screencast.com/t/EsNlvJEqM

45
Aaron Henderson

En utilisant Rails trois, vous pouvez simplement taper le nom du modèle:

> User
gives:
User(id: integer, name: string, email: string, etc...)

Dans Rails quatre, vous devez d’abord établir une connexion:

irb(main):001:0> User
=> User (call 'User.connection' to establish a connection)
irb(main):002:0> User.connection; nil #call nil to stop repl spitting out the connection object (long)
=> nil
irb(main):003:0> User
User(id: integer, name: string, email: string, etc...)
21
Yule

Si vous maîtrisez les commandes SQL, vous pouvez entrer dans le dossier de votre application et exécuter Rails db, qui est une brève forme de Rails dbconsole. Il va entrer dans le shell de votre base de données, que ce soit sqlite ou mysql.

Ensuite, vous pouvez interroger les colonnes de la table en utilisant la commande sql comme ceci:

pragma table_info(your_table);
5
gm2008

Tu peux courir Rails dbconsole dans votre outil de ligne de commande pour ouvrir la console sqlite. Puis tapez .tables pour lister toutes les tables et .fullschema pour obtenir une liste de toutes les tables avec les noms et les types de colonnes.

2
codeepic

complétant ces informations utiles, par exemple en utilisant Rails console o Rails dbconsole:

Student est mon modèle, en utilisant Rails console:

$ Rails console
> Student.column_names
 => ["id", "name", "surname", "created_at", "updated_at"] 

> Student
 => Student(id: integer, name: string, surname: string, created_at: datetime, updated_at: datetime)

Autre option utilisant SQLite via Rails:

$ Rails dbconsole

sqlite> .help

sqlite> .table
ar_internal_metadata  relatives             schools             
relationships         schema_migrations     students 

sqlite> .schema students
CREATE TABLE "students" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "surname" varchar, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL);

Enfin pour plus d'informations.

sqlite> .help

J'espère que cela t'aides!

0
Gamaliel
  • Pour lister les colonnes dans un tableau, je vais généralement avec ceci:
    Model.column_names.sort.
    i.e. Orders.column_names.sort

    Le tri des noms de colonnes facilite la recherche de ce que vous recherchez.

  • Pour plus d'informations sur chacune des colonnes, utilisez ceci:
    Model.columns.map{|column| [column.name, column.sql_type]}.to_h.

Cela fournira un hachage de Nice. par exemple:

{
   id => int(4),
   created_at => datetime
}
0
csebryam

Pour un format plus compact et moins typé, il suffit de:

Portfolio.column_types 
0
valk