Railsモデルの属性とテーブルカラムのマッピング定義

Abstract: Railsモデルの属性とDBMS側のテーブルカラムのマッピングはどこで定義されているのか

    Q.

Railsモデルの属性とDBMS側のテーブルカラムのマッピングはどこで定義されているのでしょうか?

    A.

Ruby on Railでは、各データベースに対応したアダプタのRubyソースコード内で両者のマッピングが定義されています。

Oracle:

<CGRubyInstall_Home>/lib/ruby/gems/1.8/gems/activerecord-oracle-adapter-1.0.0.x/oracle_adapter.rb


:primary_key => "NUMBER(38) NOT NULL PRIMARY KEY",
:string => { :name => "VARCHAR2", :limit => 255 },
:text => { :name => "CLOB" },
:integer => { :name => "NUMBER", :limit => 38 },
:float => { :name => "NUMBER" },
:decimal => { :name => "DECIMAL" },
:datetime => { :name => "DATE" },
:timestamp => { :name => "DATE" },
:time => { :name => "DATE" },
:date => { :name => "DATE" },
:binary => { :name => "BLOB" },
:boolean => { :name => "NUMBER", :limit => 1 }

MySQL(Rails 2.0.2):

<CGRubyInstall_Home>/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/connection_adapters/mysql_adapter.rb

   :primary_key => "int(11) DEFAULT NULL auto_increment PRIMARY KEY",
:string => { :name => "varchar", :limit => 255 },
:text => { :name => "text" },
:integer => { :name => "int", :limit => 11 },
:float => { :name => "float" },
:decimal => { :name => "decimal" },
:datetime => { :name => "datetime" },
:timestamp => { :name => "datetime" },
:time => { :name => "time" },
:date => { :name => "date" },
:binary => { :name => "blob" },
:boolean => { :name => "tinyint", :limit => 1 }

上記以外のデータベース(SQLLite、PostgreSQL)のアダプタは、MySQLアダプタと同じフォルダに格納されております。

この記事は、3rdRailの販売・技術サポートを提供しているアイル・オープンソース株式会社(旧社名オープンソースジャパン株式会社)が作成しています。