Ruby on rails 将多个现有类转换为从rails中新创建的类继承
目前,在我的rails应用程序中,我有几个类是不同的产品 e、 g.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 但是将电路模型更改为从服务继承会导致我的电路列表视图为空,这是我没有预料到的 在我的服务表中,我包含了一个类型字段,用于存储它是哪种类型的产品,但目前该表是空的 多表继承是最好的方法吗?这个应用程序相当大,所以我不想重构很多代
电路就是一个例子
我要做的是创建一个名为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