首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多态表上的连接

多态表上的连接
EN

Stack Overflow用户
提问于 2012-05-01 03:13:25
回答 3查看 2.1K关注 0票数 0

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

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

我想为卖家做一个查询,以获得他们所有已购买产品的列表,但我得到的是:

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

代码语言:javascript
复制
Hirb Error: Can not eagerly load the polymorphic association :product
EN

回答 3

Stack Overflow用户

发布于 2012-05-02 01:56:34

这就是我现在所做的:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2012-05-01 03:48:06

你不需要声明,但你必须有这样的东西:

代码语言:javascript
复制
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如何知道如何连接到绘画、歌曲和书籍,而不是其他表?它不知道,所以它不能进行连接。

票数 0
EN

Stack Overflow用户

发布于 2012-05-02 02:52:21

因为您确实有多个表继承,所以您可以有一个products表,其中包含一个多态外键,用于任何表中的每个产品记录。使用products表处理产品、卖家和采购之间的关系。如果您需要特定项目的详细信息,如图书名称,则在products中取消引用外键,并获取图书记录。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10389246

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档