Ruby on rails 将多个现有类转换为从rails中新创建的类继承

Ruby on rails 将多个现有类转换为从rails中新创建的类继承,ruby-on-rails,ruby,inheritance,polymorphism,ruby-on-rails-2,Ruby On Rails,Ruby,Inheritance,Polymorphism,Ruby On Rails 2,目前,在我的rails应用程序中,我有几个类是不同的产品 e、 g.电路就是一个例子 我要做的是创建一个名为Service的新类,并从中继承所有单独的产品模型 以前我的circuit.rb型号是 class Circuit < ActiveRecord::Base 但是将电路模型更改为从服务继承会导致我的电路列表视图为空,这是我没有预料到的 在我的服务表中,我包含了一个类型字段,用于存储它是哪种类型的产品,但目前该表是空的 多表继承是最好的方法吗?这个应用程序相当大,所以我不想重构很多代

目前,在我的rails应用程序中,我有几个类是不同的产品

e、 g.
电路就是一个例子

我要做的是创建一个名为
Service
的新类,并从中继承所有单独的产品模型

以前我的
circuit.rb
型号是

class Circuit < ActiveRecord::Base
但是将
电路
模型更改为从
服务
继承会导致我的电路列表视图为空,这是我没有预料到的

在我的
服务
表中,我包含了一个
类型
字段,用于存储它是哪种类型的产品,但目前该表是空的

多表继承是最好的方法吗?这个应用程序相当大,所以我不想重构很多代码来实现这个更改

单表继承肯定是不行的,所以我想知道是否某种关联会更好

更新

刚刚尝试了以下博客帖子:

所以我补充说

belongs_to :service
到我的单个产品型号,然后在
服务
s型号中

SUBCLASSES = [:circuit, :domain]
  SUBCLASSES.each do |class_name|
    has_one class_name
  end
end
然后在
service\u controller.rb中

def list
  @services = Service.all(:include => Service::SUBCLASSES)
end

最后,在列表视图中,我尝试检查并调试
@services
变量,但它是空的,因为查询在空的
services
表上运行,它是否也应该在
电路
表上运行?

我的看法:我想即使要使用多表继承,您也需要(理想情况下)编写一个任务,将所有公共变量放入服务表中。 如果公共变量不在父表中,多表继承就不能起作用

此外,这还取决于现有模型中有多少不常见的属性。如果没有,我宁愿使用STI。如果表的结构相同,我宁愿使用STI


但是我假设它对所有模型都不一样。

谢谢,模型完全不同,这就是为什么我不想使用单表继承。那么我想使用MTI是最好的选择。问题是什么?是为了在保持当前继承的同时修复控制器操作吗?如果是,失败的原因是什么?我没有发现与新继承相关的任何问题。@BillyChan我想问两个问题,将新模型与所有现有模型的父模型相关联的最佳方式,以及为什么当我更改继承时,我的控制器再也找不到
电路的列表了。您希望添加中间
服务的原因是什么?它带来了什么新功能?主要的功能是,我们可以了解客户有哪些服务,因此,我们不必检查每个表中的组织id,而可以检查主父表。我写了一个答案,但最后没有了解更多细节。简而言之,除了继承之外,
include
是另一种方式。在Circuit中,您可以包括一个可服务的模块,该模块让类充当服务,然后将其与组织关联。选项包括多态关联、has_many:through关联和高级has_many:through with多态关联()
belongs_to :service
SUBCLASSES = [:circuit, :domain]
  SUBCLASSES.each do |class_name|
    has_one class_name
  end
end
def list
  @services = Service.all(:include => Service::SUBCLASSES)
end