所以我试图制作一个项目的提要,其中项目是不同的,并且每个项目都可以由许多用户共享。我的数据模型是:
用户: has_many :postings, has_many :products, :through => :postings
产品 has_many :postings, has_many :users, :through :postings
发布belongs_to :user,belongs_to :product
所以我试图找到唯一产品的可窗口化(偏移量,限制)列表,并获取用户数据(或至少一个字段),这样我就不必在视图中查询它。这是我现在正在运行的查询:
def feed_items(offset, limit)
ids = followed_users.map(&:id)
ids.push id
all_rows_sql = Posting.where("user_id IN (#{ids.join(',')})").order("created_at DESC").select("product_id, row_number() over (partition by product_id) as row_number").to_sql
sql = "SELECT product_id FROM(#{all_rows_sql}) as rows where row_number = 1 OFFSET #{offset} LIMIT #{limit}"
postings = ActiveRecord::Base.connection.execute(sql)
product_ids = []
postings.each {|p| product_ids.push p['product_id'].to_i}
products = Product.find product_ids
orderedProducts = []
for product in products
orderedProducts[product_ids.index(product.id)] = product
end
orderedProducts
end
这会在合理的时间内获取产品列表,但在我看来,我不得不说 product.users.each 来显示项目下方的用户列表。这会导致大量查询,并且还会从视图中访问数据库,这两者都是一个问题。有没有人对如何在获取产品 ID 的同时获取用户 ID 有所了解?
谢谢