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

And*_*rew 105 sql activerecord ruby-on-rails ruby-on-rails-3

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

ActiveRecord::Base.connection.tables
Run Code Online (Sandbox Code Playgroud)

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

Pra*_*vin 208

这将列出表中的column_names

Model.column_names
e.g. User.column_names
Run Code Online (Sandbox Code Playgroud)

  • 您还可以运行类似`Model.columns`的内容来获取有关列的更多信息,包括数据库配置数据. (16认同)
  • 您可以始终使用Model.primary_key,它根据rails为您提供主键的名称。(除非在模型中以其他方式声明,否则它将为'id')。 (2认同)

Aar*_*son 49

这将获取列,而不仅仅是列名,并使用ActiveRecord :: Base :: Connection,因此不需要任何模型.方便快速输出数据库的结构.

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
Run Code Online (Sandbox Code Playgroud)

示例输出:http: //screencast.com/t/EsNlvJEqM


Yul*_*ule 21

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

> User
gives:
User(id: integer, name: string, email: string, etc...)
Run Code Online (Sandbox Code Playgroud)

在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...)
Run Code Online (Sandbox Code Playgroud)


Gam*_*iel 8

补充这些有用的信息,例如使用rails console或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)
Run Code Online (Sandbox Code Playgroud)

通过 Rails 使用 SQLite 的其他选项:

$ 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);
Run Code Online (Sandbox Code Playgroud)

最后了解更多信息。

sqlite> .help
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!


gm2*_*008 5

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

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

pragma table_info(your_table);
Run Code Online (Sandbox Code Playgroud)