テーブル名からカラム情報を取得

users というテーブルに定義されているカラム情報を取得する方法のメモ。

使うAPI: Ruby on Rails API columns()

テーブル名からモデルクラスを参照し、それに.columnsメソッドを使うと取得できる。

# テーブル名から、定義されているすべてのカラム定義を取得
Module.const_get('users'.classify).columns

# 特定のカラムの情報を取得(例えば `id`)
Module.const_get('users'.classify).columns['id']

# 特定のカラムから定義の一部を取得
col = Module.const_get('users'.classify).columns['id']
col.type # データ型を取得

カラムの定義の取得はこんなメソッドが用意されているっぽい。
コレで全てかわからんとです… (´・ω・`)

  • .name : カラム名
  • .sql_type : SQLでのデータ型
  • .type : データ型
  • .null : NOT NULL制約
  • .limit : カラム数制限(?)
  • .precision : 数値桁数
  • .scale : 小数点以下桁数
  • .default : デフォルト値
  • .primary : Primary制約
  • .coder: エンコード

Qiitaのコメント欄で教えていただきました。
columnsメソッドの詳細はこちらに書いてありました。
Class: ActiveRecord::ConnectionAdapters::Column

.coder の結果、今のところnilがかえってくるところしか見たことがない。
もう少し検証してみなければ。


Qiitaに投稿した記事です。