2

我正在开发一个与遗留数据库接口的应用程序,该数据库具有用于单表继承的类型列。该数据库仍被现有的 PHP 应用程序使用,因此我必须使用现有的数据库。我正在尝试为此设置一些模型,其中一个关键表设置有 STI 方案和类型列,但是,该列中的所有类型都是完全小写的。

到目前为止,在我的测试中,如果我更改值以匹配类名(例如,Claimant 而不是 Claimant),rails 可以很好地处理 type 列。但是,即使可能没问题,我也不想更改生产数据库中的这些值,也不想进入并修改旧版应用程序以不同方式保存名称...

为了解决这个问题,我有两个问题......

1)无论如何我可以配置模型来识别type ='claimant'映射到class ='Claimant'吗?

2)如果失败了,有没有办法告诉rails不要在这个表上使用STI,即使它有一个类型列?

我已经做了一些谷歌搜索,但还没有想出很多......

4

1 回答 1

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
于 2012-11-20T06:33:51.267 回答