人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Rails の単一テーブル継承についての質問です。
単一テーブル継承を使用するために、テーブルに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 の方で対策が取られなかったのでしょうか?

よろしくお願いします。

●質問者: norisuke3
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:ActiveRecord Class LIB object Rails
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● nuna
●60ポイント ベストアンサー

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に変わる新しいコラム名を入れてあげればいいんですね。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ