前回の記事で紹介した問題ですが、解決策を見つけたので書きます。
何のことはないです。継承がダメなら委譲ってことで無理やり。。
まず継承はあきらめて普通にサブクラス(だったやつ)はActiveRecord::Baseを継承します。
class B < ActiveRecord::Base
end
でスーパークラス(だったやつ)はmoduleにします。
module A
end
それをBでincludeします。
class B < ActiveRecord::Base
include A
self.table_name = “b”
end
で、belongs_toとかの設定をAにメソッド定義します。
module A
def self.initialize_me(active_record)
active_record.belongs_to :hoge
#…
end
end
最後にBから呼び出します。
class B < ActiveRecord::Base
include A
self.table_name = “b”
A.initialize_me(self)
end
あとは普通のMix-inを使って共通メソッドなりを定義していくだけです。
そもそも私、継承よりも委譲派だった。
ややこしや。