2017-08-02 150 views
1

我就知道讓誰擁有了搜索結果的產品的所有用戶的最佳方式獲得的搜索產品的用戶搜索結果

我控制器

@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 

我的觀點

<% @products.each do |p| %> 
    <%= p.user.company_name %> 
<% end %> 

我方法的工作,但如果一個公司有2個產品它的顯示它2次

+0

可能就像在_p.users.uniq.company_name_上調用_.uniq_一樣簡單,但需要查看模型和關聯以確認。 –

回答

1

假設以下:

User has_many :products 
Product belongs_to :user 

你可以這樣做:

@users_from_product_results = User.where(id: @products.pluck(:user_id)) 

如果有幾個產品,是指同一個用戶,該用戶將可以只列出一次。

+0

感謝您的幫助,但我得到SQL錯誤「子查詢有太多列」 –

+0

@AntoineWako嘗試我更新的答案。另外,您使用的是哪種數據庫系統? – MrYoshiji

+0

我使用PostgreSQL –

0

使用includes(eager_loading),可以在單個查詢中提供產品和用戶,而不是進行2個獨立的AR調用。

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這給所有與產品相關的用戶。