直到现在,我使用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我需要改变什么?
发布于 2013-10-11 11:16:57
结果是严格的,因为uniq来自数组。要匹配SQL成语中的唯一性,需要使用distinct。
来自文档的示例
person.pets.select(:name).distinct
# => [#<Pet name: "Fancy-Fancy">]尝试:
Projectuser.select(:id, :user_id).distinct发布于 2013-10-11 11:06:42
ActiveReord版本的uniq似乎忽略了给定的块,只需检查对象是否为uniq。如果您查看源代码,就会看到它只是设置了一个标志。
请参阅http://apidock.com/rails/ActiveRecord/QueryMethods/uniq
您可以将其视为生成的sql-语句的修饰符。
发布于 2013-10-11 11:21:03
我用以下方法解决了这个问题:
Projectuser.uniq.pluck(:user_id)https://stackoverflow.com/questions/19316183
复制相似问题