0

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

我有一个购买表,它具有使用 product_id 和 product_type 的多态产品关联,其中 product_type 将是绘画、歌曲、书籍等。

我想查询卖方,以获取他们所有已购买产品的列表,但我得到了这个:

Purchase.joins(:product).limit(10).offset(9000)

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

3 回答 3

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
于 2012-05-01T17:56:34.437 回答
0

由于您确实具有多个表继承,因此您可以拥有一个带有多态外键的产品表,该表中的每个产品记录都是如此。使用 products 表处理产品、卖家和购买之间的关系。如果您需要特定项目的详细信息,例如书名,取消引用产品中的外键,并获取书籍记录。

于 2012-05-01T18:52:20.600 回答
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 类中的 :product 关联是多态的,因此它不知道需要在搜索中连接的所有表是什么。ActiveRecord 怎么会知道加入绘画、歌曲和书籍,但不加入其他表?它不知道,所以它不能进行连接。

于 2012-04-30T19:48:06.000 回答