直到现在,我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
我需要改变什么?
直到现在,我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
我需要改变什么?
uniq 的 ActiveReord-Version 似乎忽略了给定的块,只检查对象是否为 uniq。如果您查看源代码,您会看到它只是设置了一个标志。
请参阅 http://apidock.com/rails/ActiveRecord/QueryMethods/uniq
您可以将其视为生成的 sql 语句的修饰符。
我使用以下方法解决了它:
Projectuser.uniq.pluck(:user_id)
结果是正确的,因为uniq
来自 Array。要匹配 SQL 惯用语中的唯一性,您需要使用 distinct。
从文档中的示例:
person.pets.select(:name).distinct
# => [#<Pet name: "Fancy-Fancy">]
尝试:
Projectuser.select(:id, :user_id).distinct