Ruby on rails 避免";“单表继承”;在Rails/ActiveRecord和旧模式中

Ruby on rails 避免";“单表继承”;在Rails/ActiveRecord和旧模式中,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我正在尝试与一个名为“type”的列的旧表集成 Rails将“巧妙地”假设,每当表中有一个“type”列时,它就会尝试使用单表继承 有没有办法避免这种情况 (我无法重命名该列)。好吧,大多数类型的it确实是智能的-约定优于配置有一些非常实际的好处。;-) 在惯例不起作用的地方,比如在你的例子中,有一种方法(可能-至少,到目前为止,我总是找到一种…)可以绕过它。对于遗留模式,有两种可能会立即浮现在脑海中 在旧数据库中创建一个表视图,重新映射列以避免AR的常规名称。当然,如果您没有数据库的创建视图

我正在尝试与一个名为“type”的列的旧表集成

Rails将“巧妙地”假设,每当表中有一个“type”列时,它就会尝试使用单表继承

有没有办法避免这种情况


(我无法重命名该列)。

好吧,大多数类型的it确实是智能的-约定优于配置有一些非常实际的好处。;-)

在惯例不起作用的地方,比如在你的例子中,有一种方法(可能-至少,到目前为止,我总是找到一种…)可以绕过它。对于遗留模式,有两种可能会立即浮现在脑海中

  • 在旧数据库中创建一个表视图,重新映射列以避免AR的常规名称。当然,如果您没有数据库的创建视图权限,或者如果您的数据库没有视图,那么就没有多大用处
  • 覆盖使用
    :使用
    设置继承列
    键入
    作为STI指示器,因此

class LegacyValue
在Rails 4中,set\u heritation\u列已被弃用,应改用self.heritation\u列:

class LegacyValue < ActiveRecord::Base
  self.inheritance_column = 'does_not_have_one'
end
class LegacyValue
使用集合继承列:这是您的最佳选择。
class LegacyValue < ActiveRecord::Base
  self.inheritance_column = 'does_not_have_one'
end