ActiveRecord: список столбцов в таблице с консоли

Я знаю, что вы можете попросить ActiveRecord перечислить таблицы в консоли, используя:

ActiveRecord::Base.connection.tables 

Есть ли команда, которая будет перечислять столбцы в данной таблице?

Это приведет к перечислению столбцов_имя из таблицы

 Model.column_names eg User.column_names 

Это получает столбцы, а не только имена столбцов и использует ActiveRecord :: Base :: Connection, поэтому никакие модели не нужны. Удобен для быстрого вывода структуры db.

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

Пример вывода: http://screencast.com/t/EsNlvJEqM

Используя рельсы три, вы можете просто ввести название модели:

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

В рельсах четыре, вам нужно сначала установить соединение:

 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...) 

Если вам удобно работать с командами SQL, вы можете войти в папку своего приложения и запустить rails db , что является краткой формой rails dbconsole . Он войдет в оболочку вашей базы данных, будь то sqlite или mysql.

Затем вы можете запросить столбцы таблицы, используя команду sql, например:

 pragma table_info(your_table); 

Вы можете запустить rails dbconsole в инструменте командной строки, чтобы открыть консоль sqlite. Затем введите .tables чтобы перечислить все таблицы и .fullschema чтобы получить список всех таблиц с именами столбцов и типами.

  • Чтобы перечислить столбцы в таблице, я обычно использую это:
    Model.column_names.sort .
    ie Orders.column_names.sort

    Сортировка имен столбцов позволяет легко найти то, что вы ищете.

  • Для получения дополнительной информации о каждом из столбцов используйте это:
    Model.columns.map{|column| [column.name, column.sql_type]}.to_h Model.columns.map{|column| [column.name, column.sql_type]}.to_h .

Это обеспечит хороший хеш. например:

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

Для более компактного формата и менее типизации:

 Portfolio.column_types