Rails单表继承与小写类型名称

时间:2012-11-20 01:46:48

标签: ruby-on-rails activerecord

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

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

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

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

2)失败了,有没有一种方法可以告诉rails在这个表上不使用STI,即使它有一个类型列?

我已经做了一些谷歌搜索,还没有提出太多...

1 个答案:

答案 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