Rails:基于不在数据库表中的方法查询

时间:2013-07-18 11:30:55

标签: ruby-on-rails ruby-on-rails-3.1

我有一个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数组。

感谢您的帮助!

1 个答案:

答案 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