如何为不同类型的模型实现has_many相似的系统?

时间:2014-09-10 12:28:24

标签: ruby-on-rails activerecord polymorphic-associations

我有几种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是否还没有为我提供一些东西:

0 个答案:

没有答案