我正在开发一个业余爱好项目并拥有一个带有STI子类Event
,Meal
,Outing
等的抽象Medication
模型。Event
父模型有start_time
,end_time
,description
等
我希望为各种子类提供嵌套资源。例如,我希望能够将Image
类的多个实例附加到任何Event
子类。我希望能够将Medicine
类的多个实例附加到Medication
个实体,将多个Location
实例附加到Outing
等等。
我考虑多态性的原因是提供灵活性,以便可以想象,任何不同类型的嵌套资源都可以附加到Event.
的任何子类。这将允许某人附加“维生素”的药物例如,D补充“到Meal
。
我的问题是:
Event
吗? has_many
关系吗?has_many
与多态的对比是否有任何性能优势?答案 0 :(得分:0)
(1)是的。
(2)是的,取决于你如何处理多态性。 Rails允许STI(单表继承),因此事件的所有子类型都可以继承has_many关系。相关的has_many记录可以有许多子类型,所有这些都将在调用时显示为关系。
(3)has_many可以与多态一起使用,它们不是互斥的。
(4)同样,两者并不相互排斥。实际上,您的belongs_to关系需要多态。您的相关记录应在其表中包含relation_id和relation_type。例如,如果您正在使用STI,您可以这样做:
class BaseClass < ActiveRecord::Base
has_many :foo
end
class SubClass < BaseClass
# inherits has_many :foo relation from BaseClass
end
class Foo < ActiveRecord::Base
belongs_to :base_class, polymorphic: true
end
class Bar < Foo
# inherits belongs_to :base_class from Foo
end
调用sub_class-instance.foos时,您应该获得所有foos的ActiveRecord关系,包括子类型。