我有卖家出售各种类型的产品(绘画,歌曲,书籍等)。
我有一个purchases表,它有一个使用product_id和product_type的多态产品关联,其中product_type是绘画、歌曲、书籍等。
我想为卖家做一个查询,以获得他们所有已购买产品的列表,但我得到的是:
Purchase.joins(:product).limit(10).offset(9000)
Hirb Error: Can not eagerly load the polymorphic association :product发布于 2012-05-02 01:56:34
这就是我现在所做的:
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-01 03:48:06
你不需要声明,但你必须有这样的东西:
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-05-02 02:52:21
因为您确实有多个表继承,所以您可以有一个products表,其中包含一个多态外键,用于任何表中的每个产品记录。使用products表处理产品、卖家和采购之间的关系。如果您需要特定项目的详细信息,如图书名称,则在products中取消引用外键,并获取图书记录。
https://stackoverflow.com/questions/10389246
复制相似问题