我正在开发一个与遗留数据库接口的应用程序,该数据库具有用于单表继承的类型列。这个数据库仍然被现有的PHP应用程序使用,因此我必须处理那里的内容。我正在尝试为此设置一些模型,其中一个关键表是使用STI方案和类型列设置的,但是,该列中的所有类型都是全小写的。
在我到目前为止的测试中,如果我更改值以匹配类名(例如,Claimant而不是claimant),则rails可以使用type列。但是我不想在生产数据库中更改这些值,即使它可能没问题,我也不想进入并修改遗留应用程序以保存不同的名称......
为了解决这个问题,我有两个问题......
1)无论如何我可以配置模型以识别type ='claimant'映射到class ='Claimant'?
2)失败了,有没有一种方法可以告诉rails在这个表上不使用STI,即使它有一个类型列?
我已经做了一些谷歌搜索,还没有提出太多...
答案 0 :(得分:0)
我没有在STI设置中尝试过这个,但是在使用旧表时,我可以在ActiveRecord模型上使用方法“set_table_name”。
class Claimant < ActiveRecord::Base
set_table_name 'claimant'
end
或使用自定义方法:
def table_name
'claimant'
end
道歉我没有方便的STI表来测试它,但认为它可能有助于解决您的问题。
在回答问题的第二部分时,我相信您可以通过指定不存在的列名来禁用Rails查看类型列。
class Claimant < ActiveRecord::Base
inheritance_column = :_type_column_disabled
end