ruby-on-rails Rails --使用类型列而不使用STI?

tez616oj  于 2022-11-19  发布在  Ruby
关注(0)|答案(5)|浏览(160)

我想使用一个名为type的列,而不调用单表继承(STI)-我只想让type成为一个保存String的普通列。
我如何做到这一点,而不让Rails期望我有单表继承并抛出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.异常?
有什么好主意吗?

6tr1vspr

6tr1vspr1#

在Rails 3.1中,set_inheritance_column已被弃用,您也可以只使用nil作为名称,如下所示:

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

brjng4g32#

我知道这个问题已经很老了,而且与您要问的问题有点不同,但是每当我想给列命名type或something_type时,我总是搜索type的同义词,然后使用它来代替:
这里有几个选择:* 种类、排序、品种、类别、集、流派、种类、顺序等 *

7fhtutme

7fhtutme3#

可以使用set_inheritance_column覆盖STI列名:

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

因此,选择一些不会用于任何操作的列名,并将其提供给set_inheritance_column
在Rails的较新版本中,您可以将inheritance_column设置为nil

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

eblbsuwk4#

导轨4.x

我在一个**Rails 4应用程序中遇到了这个问题,但是在Rails 4**中,set_inheritance_column方法根本不存在,因此您无法使用它。
对我有效的解决方案是通过覆盖ActiveRecordinheritance_column方法来禁用单表继承,如下所示:

class MyModel < ActiveRecord::Base

  private

  def self.inheritance_column
    nil
  end

end

希望能有所帮助!

vhmi4jdf

vhmi4jdf5#

如果你想对所有的模型都这样做,你可以把它放在一个初始化器中。

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

相关问题