在Rails/ActiveRecord和Legacy Schema中避免"单表继承"

iwa*_*wan 6 activerecord ruby-on-rails

我正在尝试与具有名为"type"的列的Legacy表集成.

Rails将"巧妙地"假设每当我们在表中有一个'type'列时,它就会尝试使用Single Table Inheritance.

反正有没有避免这个?

(我无法重命名该列).

Mik*_*use 11

嗯,大多数类型它真的聪明 - 约定优于配置有一些非常实际的好处.;-)

如果惯例不起作用,就像在你的情况下那样(可能 - 至少,我总是找到一个到目前为止......)一种绕过它的方法.对于遗留模式,有一些可能会立即浮现在脑海中.

  • 在旧数据库中创建单表视图,重新映射列以避免AR的常规名称.如果您对数据库没有CREATE VIEW权限,或者您的数据库没有视图,那么用处不大;
  • 覆盖使用:type作为STI指示器使用set_inheritance_column,从而

class LegacyValue < ActiveRecord::Base
  set_inheritance_column 'does_not_have_one'
end
Run Code Online (Sandbox Code Playgroud)