web-dev-qa-db-ja.com

ActiveRecord:コンソールからテーブルの列をリスト

ActiveRecordに以下を使用してコンソールのテーブルを一覧表示するように依頼できることを知っています。

ActiveRecord::Base.connection.tables

特定のテーブルの列をリストするコマンドはありますか?

101
Andrew

これにより、テーブルのcolumn_namesがリストされます。

Model.column_names
e.g. User.column_names
201
Pravin

これは列名だけでなく列を取得し、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

サンプル出力: http://screencast.com/t/EsNlvJEqM

45
Aaron Henderson

Rails threeを使用すると、モデル名を入力できます。

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

Rails fourでは、最初に接続を確立する必要があります。

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

SQLコマンドに慣れている場合は、アプリのフォルダーに入り、Rails dbの簡単な形式であるRails dbconsoleを実行できます。 sqliteであろうとmysqlであろうと、データベースのシェルに入ります。

次に、次のようなsqlコマンドを使用してテーブル列を照会できます。

pragma table_info(your_table);
5
gm2008

コマンドラインツールでRails dbconsoleを実行して、sqliteコンソールを開くことができます。次に、.tablesと入力してすべてのテーブルをリストし、.fullschemaと入力して、列の名前とタイプを含むすべてのテーブルのリストを取得します。

2
codeepic

たとえば、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)

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

最後に詳細をご覧ください。

sqlite> .help

お役に立てれば!

0
Gamaliel
  • テーブルの列をリストするには、通常これを使用します。
    Model.column_names.sort
    i.e. Orders.column_names.sort

    列名をソートすると、探しているものを簡単に見つけることができます。

  • 各列の詳細については、次を使用してください。
    Model.columns.map{|column| [column.name, column.sql_type]}.to_h

これにより、ニースハッシュが提供されます。例えば:

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

よりコンパクトな形式で、入力を少なくする場合:

Portfolio.column_types 
0
valk