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?
Ceci listera les noms de colonne d'une table
Model.column_names
e.g. User.column_names
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
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...)
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);
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.
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!
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
}
Pour un format plus compact et moins typé, il suffit de:
Portfolio.column_types