3

我有用户表,其中包含许多字段,包括部门 ID。departmentid 只是一个字符串。每个部门标识可以有不同的用户。是否可以从用户表中找到所有部门标识而无需重复。

我试图从用户表中找到所有的部门ID,但结果包含重复的部门ID。如何解决这个问题。

提前致谢...

4

2 回答 2

3

SQL

select distinct department_id from users

红宝石代码

User.all.map(&:department_id).compact.uniq

也在rails 3中

User.select('departement_id').uniq
于 2012-12-17T04:54:48.923 回答
1

您可能希望使用 sql 查询让 db 引擎处理数学并避免创建 ruby​​ 对象,这是更快的选择:

Department.where("id in (select distinct department_id from users)").all

现在,如果您想以 Rails 方式进行操作,您仍然可以这样做:

Department.where(id: User.select("distinct department_id").map(&:department_id)).all

请注意,使用最后一行代码,您可以避免创建 User 属性的完整映射,因为您只对 department_id 感兴趣,并且它还避免了通过每个 User 对象来收集 id 并使它们成为 uniq,通过使用 select distinct 数据库引擎将只返回单个值而不重复

于 2012-12-17T05:06:37.720 回答