ActiveRecordの抽象サブクラスを作る
普通にActiveRecordのサブクラスを作るとSTIと見なされて、サブクラスはテーブルと一対一対応にはなりません。親クラスだけがテーブルと対応してて、サブクラスのインスタンスには親クラステーブルから必要なのだけとってきて設定される感じ。
これはこれで便利なんだろうけど、そうじゃなく逆にサブクラスがテーブルと対応してて親クラスはサブクラスを抽象化した存在であってほしいこともあります。そういう時はこう。
class AbstractClass < ActiveRecord::Base self.abstract_class = true end class OneSubClass < AbstractClass; end class AnotherSubClass < AbstractClass; end
こうするとabstract_classesテーブルではなく、one_sub_classesテーブルとanother_sub_classesテーブルにちゃんとデータが保持されます。