32

Rails 3.2.6には、ActiveRecord :: Base:を継承するクラスがあります。

class Section < ActiveRecord::Base
  ...
end

このクラスから継承すると、RailsはSTIが必要だと想定します。

class AnotherSection < Section
   ..Rails assumes I have a type field, etc...
end

SectionRails STIマジックなしで、クラスから継承し、サブクラスを通常のRubyサブクラスとして使用できるようにしたいと思います。

ActiveRecord::Baseモデルからサブクラス化するときにSTIを防ぐ方法はありますか?

4

3 に答える 3

47

inheritance_column次のように、モデルの を無効にすることでこれを実現できます。

class AnotherSection < Section
  # disable STI
  self.inheritance_column = :_type_disabled

end
于 2012-07-26T19:10:39.313 に答える
10

受け入れられた答えは間違いなく機能しますが、推奨される(あえて「適切な」と言います:)方法は次のように設定することですabstract_class

class Section < ActiveRecord::Base
  self.abstract_class = true
end
于 2015-06-17T23:55:00.610 に答える