加入多态表

时间:2012-04-30 19:13:25

标签: ruby-on-rails activerecord

我有销售各种类型产品的卖家(绘画,歌曲,书籍等)。

我有一个购买表,其中包含使用product_id和product_type的多态产品关联,其中product_type将是Painting,Song,Book等。

我想对卖家进行查询,以获取已购买的所有产品的清单,但我明白这一点:

Purchase.joins(:产物).limit(10).offset(9000)

Hirb Error: Can not eagerly load the polymorphic association :product

3 个答案:

答案 0 :(得分:1)

这就是我现在正在做的事情:

class Seller < User
  def sales
    Purchase.where("(product_id in (?) AND product_type = 'Book') OR (product_id IN (?) AND product_type = 'Song')", books.collect(&:id), songs.collect(&:id))
  end
end

答案 1 :(得分:0)

你没有陈述,但你必须有:

class Purchase
  belongs_to :product, :polymorphic => true
end
class Painting
  has_many :purchases, :as => :product
end
class Song
  has_many :purchases, :as => :product
end
class Book
  has_many :purchases, :as => :product
end

由于:Purchase类中的产品关联是多态的,因此不知道在搜索中需要加入的所有表是什么。 ActiveRecord如何知道加入绘画,歌曲和书籍,但没有其他表格?它不知道,所以它无法进行连接。

答案 2 :(得分:0)

由于您确实有多个表继承,因此您可以在任何表中为每个产品记录提供带有多态外键的product表。使用产品表执行产品,卖家和购买之间的关系。如果您需要特定项目的详细信息,例如书名,请取消引用产品中的外键,并获取书籍记录。