我有几种Orders
;它们在属性和行为上有很大不同;但他们有一个共同的界面(鸭子)。大致如此:
class PackageOrder
has_one :package
def line_items
[package, package.site.first]
end
end
class SiteOrder
has_one :site
def line_items
[site]
end
end
class Customer
has_many :package_orders
has_many :site_orders
end
有没有办法在客户上抽象出各种orders
?所以我可以说积极记录的东西,如:
Customer.orders
Customer.orders << PackageOrder.new
每当我引入新的has_many
变体时,我都不必添加Order
行?
我不太熟悉多态关联的所有可能用法,所以也许这提供了一个解决方案?这有可行吗?
显然,我可以在Customer
(伪代码警告)
class Customer
ORDER_TYPES = [:package_order, :site_order]
class_eval.do
ORDER_TYPES.each {|type| has_many type.pluralize.to_sym}
end
def orders
ORDER_TYPES.map {|type| self.type.pluralize }.flatten
end
end
但我想知道ActiveRecord或Rails是否还没有为我提供一些东西: