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是通过重写ActiveRecord
的inheritance_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