マイグレーション(rake db:migrate)の確認・Railsカラム生成メソッドとMySQLデータ型の対応表

スポンサーリンク
スポンサーリンク
ライフスタイル関連のコンテンツ
お金 | 仕事 | 勉強 | プライベート | 健康 |
プログラミング関連のコンテンツ
C言語/C++入門 | Ruby入門 | Python入門 | プログラミング全般

Railsでは、scaffold(スキャフォールド)がとても便利な機能です。CakePHPでも同じ機能がありましたね。
scaffoldとは土台、足場などの意味で、Railsにおいてモデルのクラス名を決定し、以下のコマンドを実行すると、scaffoldが行われ各種ファイルが自動生成されます。

スポンサーリンク

ruby script/generate scaffold hoge name:string account:string

このコマンドにおいては、scaffoldに続くhogeがモデル名となります。
「name:string account:string」は、「DBテーブルのカラム名:データ型」を引数で指定します。

参考:Ruby on Railsのデータベースとモデルクラス・MVCの対応関係

DBテーブルの「カラム名:データ型」を指定して、scaffoldしてやるとマイグレーションファイルも自動で生成されます。
マイグレーションにより、DBのテーブル・カラムを新たに作成したり、元に戻したりという作業が楽になります。
ためしに、以下のマイグレーションファイルを手動で作成し、マイグレーションを実行して(「rake db:migrate」)、DBカラムの実際のデータ型を確認してみました。
Rails2.0からは、カラムのデータ型を指定するのにシンボルの代わりに、メソッドとしても使えるようになっています。

class CreateTest < ActiveRecord::Migration
  def self.up
    create_table :test do |t|
      t.string :test_string
      t.text :test_text
      t.integer :test_integer
      t.float :test_float
      t.decimal :test_decimal
      t.datetime :test_datetime
      t.timestamp :test_timestamp
      t.time :test_time
      t.date :test_date
      t.binary :test_binary
      t.boolean :test_boolean
    end
  end
 
  def self.down
    drop_table :test
  end
end

「t.○○」の○○の部分がRailsによるカラムのデータ型を指定するメソッド名で、引数として「:test_string」と与えるのがカラム名となります。
Rails1.2までは、「t.string :test_string」は、「t.column :test_string, :string」とcolumnメソッドで、カラム名とデータ型をシンボル引数で渡していたようです。

上記のマイグレーションから確認できたデータベースのRailsのシンボル指定と、MySQLテーブルのカラムのデータ型との対応をまとめておきます。
Railsが表すカラムのデータ型と、実際のMySQLのデータ型がどのように対応しているのか。

MySQLデータベースでのRailsシンボルとデータ型の対応

Railsのメソッド名 | カラムのデータ型

string | varchar(255)
text | text
integer | int(11)
float | float
decimal | decimal(10,0)
datetime | datetime
timestamp | datetime
time | time
date | date
binary | blob
boolean | tinyint(1)

Railsのメソッド名と実際に生成されるカラムのデータ型では、以下のデータ型の名前が異なっているので注意です。

string | varchar(255)
integer | int(11)
binary | blob
boolean | tinyint(1)

スポンサーリンク
 
スポンサーリンク