Rails STI模型具有相同的名称,但继承自另一个模型

时间:2011-07-07 17:57:18

标签: ruby-on-rails ruby

My Rails应用程序使用STI,我有两种不同类型的客户。一个是客户,另一个是公司客户。

因此,在我的People控制器中,我想实例化一个Customer。 (这样Person的type属性就是Customer)。

我的客户模型继承自Person模型。模型文件名称为customer.rb在我的公司控制器中,我还想实例化一个Customer,它再次使用customer.rb,但这不起作用,因为它仍然从Person继承。

我如何使用相同的模型,但每个模型需要从另一个模型继承?

#models/customer.rb
class Customer < Person
end

#models/customer.rb
class Customer < Company
end

我尝试将customer.rb移动到不同的目录,例如person /,company /但我不确定这是否正确。也许我应该使用模块?

2 个答案:

答案 0 :(得分:1)

那不行。您不能拥有两个具有相同名称的不同类,并且一个类不能从两个类继承。

也许您可以使用Customer和Person / Company之间的多态关联。

class Person
  has_many :customers, :as => :customer_entity
end

class Company
  has_many :customers, :as => :customer_entity
end

class Customer
  belongs_to :customer_entity, :polymorphic => true
end

答案 1 :(得分:0)

这不起作用的原因是,在您提供的示例中,Customer的第二个类定义将从Person更改为继承,这不是您想要的。

如果多态建议对您不起作用,另一种解决方案是创建两个类,CustomerPerson和CustomerCompany(我建议使用更好的名称!)并提取模块的任何常用功能,然后将其包含/扩展到每节课。