Rails:使用两列返回uniq结果

时间:2015-08-25 21:22:58

标签: ruby-on-rails ruby

用户提交搜索后,我想显示公司在同一天进行相同搜索的历史记录。让我解释一下......

我有一个searches表,如下:

id   user_id   date          query
1    1         01-01-2015    A457263
2    1         01-01-2015    A457263
3    2         01-01-2015    A457263
4    3         01-01-2015    A457263
5    3         02-01-2015    A457263

users属于公司:

id   company_id
1    1
2    1
3    2

id   name
1    Company One
2    Company Two

现在我要做的是选择针对该特定查询A457263的所有搜索。我假设它:

query = params[:query]
@history = Search.where("query = ?", query)

然后过滤掉同一天在同一家公司用户进行的重复搜索。

所以最终结果如下:

id    user_id    date         query
1     1          01-01-2015   A457263
4     3          01-01-2015   A457263
5     3          02-01-2015   A457263

我一直在搞乱uniq方法,但这次我无法绕过它。

2 个答案:

答案 0 :(得分:0)

您需要group公司ID和搜索日期。

@history = Search.includes(:user).where("searches.query = ?", query).group("users.company_id, searches.date")

includes可让您访问用户表,该表允许您按公司ID进行分组。 group确保您只为每个公司ID和搜索日期获得一条记录。

答案 1 :(得分:0)

这应该这样做:

@history = Search.joins(:users).where("searches.query = ?", query).uniq.group("users.company_id, searches.date")