我不确定这是否是您正在寻找的答案,但我会尝试。
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
我还没有测试这一切,你可以吗?