単一テーブル継承を使用するために、テーブルにtype 列を作成したのですが、これのために、以下のようなwarningメッセージが出るようになりました。
/opt/local/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/active_record/associations/association_proxy.rb:217: warning: Object#type is deprecated; use Object#class
これを止めるにはどのような方法がありますか?
Object#type が deprecated だというのはわかったのですが、deprecated になったときに、単一テーブル継承の仕組み、もしくはActiveRecotd の方で対策が取られなかったのでしょうか?
よろしくお願いします。
type フィールドにアクセスするには、record.type ではなく record[:type] とハッシュの形式を使ってください。
元々 Ruby にあったメソッド Object#type と名前がかぶっているため、record.type としたときには type フィールドへのアクセスではなく、Object#type メソッドが呼ばれています。
呼ばれた Object#type は非推奨メソッドで Object#class が同機能の新しいメソッドなので deprecated の warning が出ています。
なお、これは Ruby 本体が出している warning で ActiveRecord は関係ありません。
あるいは、カラム名を type ではなく他の名前にすればメソッド名との重複を避けることができます。
http://www.tatvartha.com/2009/08/rails-single-table-inheritance-...
回答ありがとうございます。
エラーメッセージからわかるように、その record.type を呼んでいるのが、ActiveRecord のライブラリ内なので、まぁ、手を入れようと思えば入れられますが、みなさん、普通はどうされているのかなと思ったのが質問の動機です。単一テーブル継承を使うと必ず遭遇する問題だと思ったので、解決されてないのが不思議に思えました。
inheritance_column にtypeに変わる新しいコラム名を入れてあげればいいんですね。