[All]
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アダプタと同じフォルダに格納されております。