2

我有一个 Restaurant 和 Category 类,它们都具有 has_and_belong_to_many 关系。通过这个关联,我得到了一个返回数组的 restaurant.category_ids 方法。

我想选择属于指定类别的餐厅(可以是多个)。如何构建此查询?

到目前为止,我有:

@restaurants = Restaurant.joins(:categories).where('categories.id' =>    params[:category_ids])

但这会返回重复项以及仅适合其中一个类别的餐厅。

例如,搜索美国、廉价和快餐店,我会为 @restaurants 提供 [“Mcdonald's”、“McDonald's”、“McDonald's”、“Burger King”]。

我也试过:

@restaurants = Restaurant.where(:category_ids => params[:category_ids])

但是 category_ids 不是数据库字段,这不起作用。

注意:params[:category_ids] 是一个 id 数组。

谢谢你的帮助!

4

1 回答 1

1

我认为唯一可行的解​​决方案是生成查询

Restaurant.joins(:categories).where('categories.id' => cat_id1).where('categories.id' => cat_id2)...

因为那样你会得到第一个 where AND 第二个 where AND ...

仅在需要添加时获取记录.distinct

所以一个完整的解决方案就像(我不确定这是否是有效的语法)

query = Restaurant.joins(:categories)
category_ids.each do |category_id|
  query = query.where('categories.id' => category_id)
end
query.distinct
于 2013-07-18T11:47:46.530 回答