Rails – 使用没有STI的types列?

我想使用一个名为“types”的列,而不会调用单表inheritance – 我只是希望types是一个正常的列,其中包含一个string。 我怎样才能做到这一点,而没有铁轨期待我有单表inheritance/返回The single-table inheritance mechanism failed to locate the subclass...This error is raised because the column 'type' is reserved for storing the class in case of inheritance. 任何想法如何做到这一点?

在Rails 3.1中, set_inheritance_column是不推荐使用的,你也可以使用nil作为名字,如下所示:

 class Pancakes < ActiveRecord::Base self.inheritance_column = nil #... end 

您可以使用set_inheritance_column覆盖STI列名称:

 class Pancakes < ActiveRecord::Base set_inheritance_column 'something_you_will_not_use' #... end 

所以select一些你不会用到的列名,然后把它提供给set_inheritance_column

我知道这个问题是相当古老的,这偏离了你所问的问题,但是当我感到命名列types或something_type的冲动时,我总是这样做:我searchtypes的同义词并使用它:

这里有几个select: 种类,种类,种类,种类,集合,种类,种类,顺序等。

Rails 4.x

我在Rails 4应用程序中遇到了这个问题,但在Rails 4中set_inheritance_column方法根本不存在,所以你不能使用它。

我的解决scheme是通过重写ActiveRecordinheritance_column方法来禁用单表inheritance,如下所示:

 class MyModel < ActiveRecord::Base private def self.inheritance_column nil end end 

希望它有帮助!

如果你想为所有模型做到这一点,你可以坚持在初始化。

 ActiveSupport.on_load(:active_record) do class ::ActiveRecord::Base # disable STI to allow columns named "type" self.inheritance_column = :_type_disabled end end