sql - ActiveRecord:列出缺陷表中的列

我知道您可以要求ActiveRecord使用以下命令在控制台中列出表:

ActiveRecord::Base.connection.tables

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

8个解决方案
192 votes

这将列出表中的column_names

Model.column_names
e.g. User.column_names
Pravin answered 2019-08-10T20:16:42Z
40 votes

这将获取列,而不仅仅是列名,并使用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]

Aaron Henderson answered 2019-08-10T20:17:13Z
20 votes

使用rails 3,您只需键入型号名称:

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

在rails 4中,您需要先建立连接:

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...)
Yule answered 2019-08-10T20:17:44Z
5 votes

如果您熟悉SQL命令,则可以输入应用程序的文件夹并运行rails db,这是rails dbconsole的简要形式。它将进入数据库的shell,无论是sqlite还是mysql。

然后,您可以使用sql命令查询表列,如:

pragma table_info(your_table);
gm2008 answered 2019-08-10T20:18:15Z
2 votes

您可以在命令行工具中运行rails dbconsole以打开sqlite控制台。 然后键入.tables以列出所有表和.fullschema以获取具有列名称和类型的所有表的列表。

codeepic answered 2019-08-10T20:18:41Z
0 votes
  • 要列出表中的列,我通常会这样:
    Model.columns.map{|column| [column.name, column.sql_type]}.to_h
    i.e. Orders.column_names.sort

    对列名称进行排序可以轻松找到您要查找的内容。

  • 有关每个列的更多信息,请使用以下命令:
    Model.columns.map{|column| [column.name, column.sql_type]}.to_h

这将提供一个很好的哈希。例如:

{
   id => int(4),
   created_at => datetime
}
csebryam answered 2019-08-10T20:19:43Z
0 votes

对于更紧凑的格式,更少打字:

Portfolio.column_types 
valk answered 2019-08-10T20:20:08Z
0 votes

补充这些有用的信息,例如使用rails console o rails dbconsole:

学生是我的模型,使用rails控制台:

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

使用SQLite通过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);

最后了解更多信息。

sqlite> .help

希望这可以帮助!

Gamaliel answered 2019-08-10T20:20:55Z
translate from https://stackoverflow.com:/questions/5575970/activerecord-list-columns-in-table-from-console