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 dbconsole
forms。 它会进入你的数据库的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