0

我有一个简单的应用程序,用户可以在其中查看产品并预订它们,这样他们在发布时就有库存。

A Product has many preorders, and many users through preorders.

A User has many preorders, and many products through preorders.

当您查看产品时,我想展示其他人已预订的其他产品。我已经尝试了许多连接 where 等的组合,但我不知道如何将我的头包裹起来。

查看产品时,我需要找到所有已预订此特定产品的用户。然后我需要列出这些用户预购的所有产品,理想情况下,它们会按照预购的次数进行排序。

4

1 回答 1

1

我不确定这是否是您正在寻找的答案,但我会尝试。

product.users # Gives you the users with preorders for that specific product.

对于这些用户已预订的所有产品:

user.preorders # will give you all preorders for a given user.

更新

您有一个产品,您想根据已预订产品的用户获得更多产品,以制作元组列表(产品,preorders_count)。

products = product.users.products # products not defined yet, see below

用户模型

def self.products
  # [[pid1, pid2], [pid1], [pid2]]
  # includes to reduce the number of queries
  product_ids = includes(:products).all.map(&:product_ids)
  # [pid1, pid2]
  product_ids.flatten!.uniq!
  # return a relation ,so you can call product.users.products.where...
  Product.where id: product_ids
end

然后你可以使用:

products.each do |product|
  product.preorders.size
end

建议

您可以在产品表中使用缓存计数器进行预购

rails g migration add_preorders_count_to_products preorders_count:integer
# verify your migration
rake db:migrate

在预购模型中:

belongs_to :product, counter_cache: true

我还没有测试这一切,你可以吗?

于 2013-05-05T23:20:57.513 回答