我有一个Restaurant和Category类,它们都有has_and_belong_to_many关系。通过这个关联,我得到一个返回数组的restaurant.category_ids方法。
我想选择属于指定类别的餐馆(可以多于一个)。如何构建此查询?
到目前为止,我有:
@restaurants = Restaurant.joins(:categories).where('categories.id' => params[:category_ids])
但是这会返回重复项以及只适合其中一个类别的餐馆。
例如,搜索美国,廉价和快餐店给@restaurants的[“麦当劳”,“麦当劳”,“麦当劳”,“汉堡王”)。
我也尝试过:
@restaurants = Restaurant.where(:category_ids => params[:category_ids])
但是category_ids不是数据库字段,这不起作用。
注意:params [:category_ids]是一个id数组。
感谢您的帮助!
答案 0 :(得分:1)
我认为唯一可行的解决方案是生成像
这样的查询Restaurant.joins(:categories).where('categories.id' => cat_id1).where('categories.id' => cat_id2)...
因为那样你将获得第一个和第二个AND ...
仅在您需要添加.distinct
所以整个解决方案就像(我不确定这是否是有效的语法)
query = Restaurant.joins(:categories)
category_ids.each do |category_id|
query = query.where('categories.id' => category_id)
end
query.distinct