1

直到现在,我uniq_by一直在计算唯一的项目用户。但是这种方法已被弃用,建议改为使用uniq。但uniq_by返回 2(正确!)并uniq返回 3(不正确)。projectuser 表填充如下:

id,user_id
1,1
2,1
3,2

以下是声明:

Projectuser.uniq_by {|p| p.user_id}.count --> 2
Projectuser.uniq {|p| p.user_id}.count --> 3

我需要改变什么?

4

3 回答 3

1

uniq 的 ActiveReord-Version 似乎忽略了给定的块,只检查对象是否为 uniq。如果您查看源代码,您会看到它只是设置了一个标志。

请参阅 http://apidock.com/rails/ActiveRecord/QueryMethods/uniq

您可以将其视为生成的 sql 语句的修饰符。

于 2013-10-11T11:06:42.480 回答
0

我使用以下方法解决了它:

Projectuser.uniq.pluck(:user_id)
于 2013-10-11T11:21:03.297 回答
0

结果是正确的,因为uniq来自 Array。要匹配 SQL 惯用语中的唯一性,您需要使用 distinct。

文档中的示例:

person.pets.select(:name).distinct
# => [#<Pet name: "Fancy-Fancy">]

尝试:

Projectuser.select(:id, :user_id).distinct
于 2013-10-11T11:16:57.483 回答