activerecord(rails)の「type」カラムについて
RailsのModelに「type」という名前のカラムを追加するとNG!「type」は予約語になってるって!
※inheritance_columnというカラムに指定される。
だから、フォームからパラメータを引き受けてインスタンを作っても、値が格納されない。
@entry = Entry.new params[:entry] # params[:entry][:type] => 1 p entry.type # =>nil
となるわけだけど、処理内容を説明すると
- newメソッドで、initializeメソッドが実行される。
- initializeで、指定したハッシュをattributesに格納する。※ここでは {:type => 1, ...}
- attributes処理で、inheritance_columnに「type」カラムが登録されているので、処理から外される。
- 以下のメソッドを参照
...ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/base.rb remove_attributes_protected_from_mass_assignment attributes_protected_by_default
inheritance_column
単一テーブル継承に使用されるカラム名を定義します ― サブクラスで上書きできます。
activerecordで単一テーブルの予約語として使用しているから、そのまま継承すると「type」が予約語に
なってしまうので
class Entry < ActiveRecord::Base self.inheritance_column = "type_class" end
とかで、変更してみる。(良かろうか?)やっぱり、他の名前「entry_type」とかでカラムを作成しよう。