我知道让所有拥有搜索结果产品的用户的最佳方式
我的控制器
WITH StateTransitions AS (
SELECT *
FROM (
VALUES
('x','p', 'A'),
('x','q', 'B'),
('x','r', 'A'),
('x','s', 'B'),
('x','t', 'A'),
('y','p', 'A'),
('y','q', 'A'),
('y','r', 'B'),
('y','s', 'B'),
('y','t', 'B'),
('z','p', 'C'),
('z','q', 'B'),
('z','r', 'A'),
('z','s', 'A'),
('z','t', 'B'),
) AS TableLiteral(Foo, Bar, Category)
),
rest of query.
我的观点
@users = User.all // i must change here ?
if params[:product_type].present? && params[:location].present? && params[:discount].present?
@products = Product.near(params[:location], 1, units: :km).where(product_type: params[:product_type], discount: params[:discount])
end
我的方法有效,但如果一家公司有2个产品,它会显示2次
答案 0 :(得分:1)
假设如下:
User has_many :products
Product belongs_to :user
你可以这样做:
@users_from_product_results = User.where(id: @products.pluck(:user_id))
如果多个产品引用同一个用户,则此用户只会列出一次。
答案 1 :(得分:0)
不是进行2次单独的AR调用,而是使用包含(eager_loading),它在单个查询中同时提供产品和用户。
if params[:product_type].present? && params[:location].present? && params[:discount].present?
@products = Product.near(params[:location], 1, units: :km).where(product_type: params[:product_type], discount: params[:discount])
.includes(:user)
end
在视图中,您可以使用@products.map(:users).uniq
来提供与产品相关联的所有用户。