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 /但我不确定这是否正确。也许我应该使用模块?
答案 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(我建议使用更好的名称!)并提取模块的任何常用功能,然后将其包含/扩展到每节课。