【问题标题】:Rails single table inheritance with lowercase type names使用小写类型名称的 Rails 单表继承
【发布时间】:2023-03-04 07:27:07
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

    我没有在 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-21
      • 1970-01-01
      相关资源
      最近更新 更多