ActiveRecord:从控制台列表中列出列

我知道你可以让ActiveRecord在控制台中列出表格,使用:

ActiveRecord::Base.connection.tables 

有一个命令可以列出给定表中的列吗?

这将列出一个表中的column_names

 Model.column_names eg User.column_names 

这会得到列,而不仅仅是列名,并使用ActiveRecord :: Base :: Connection,所以不需要模型。 方便快速输出数据库的结构。

 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

使用rails三,你可以input模型名称:

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

在第四轨中,您需要先build立连接:

 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命令感到满意,则可以input应用程序的文件夹并运行rails db ,这是一个简单的rails dbconsoleforms。 它会进入你的数据库的shell,无论是sqlite还是mysql。

然后,你可以使用sql命令来查询表列:

 pragma table_info(your_table); 

你可以在你的命令行工具中运行rails dbconsole来打开sqlite控制台。 然后input.fullschema来列出所有表和.fullschema以获得列名和types的所有表的列表。

  • 要列出一个表中的列,我通常会这样做:
    Model.column_names.sort
    ie Orders.column_names.sort

    对列名进行sorting可以轻松find要查找的内容。

  • 有关每个列的更多信息,请使用以下命令:
    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 } 

对于一个更紧凑的格式,lessinput只是:

 Portfolio.column_types