2012-12-17 32 views
3

我有用戶表,其中包含許多字段,包括部門。 departmentid只是一個字符串。每個部門可以有不同的用戶。可以從用戶表中找到所有部門,而不需要重複。Ruby on Rails:從用戶中查找所有部門表

我試圖從用戶表中找到所有的部門,但結果包含部門重複。如何解決這個問題。

在此先感謝...

回答

3

SQL

select distinct department_id from users 

Ruby代碼

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

也導軌3

User.select('departement_id').uniq 
+0

User.se lect('departmentid').uniq工作正常........謝謝。 – Cyber

1

你可能想使用一個SQL查詢讓數據庫引擎來處理數學和避免創建Ruby對象,它的速度更快的選擇:

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

現在,如果你想這樣做軌道方式,你仍然可以做:

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

注意用這個代碼最後一行,您可以避免創建用戶屬性的完整映射,因爲所有您感興趣的是department_id,並且它避免通過每個User對象來收集ID並使它們變爲uniq,通過使用select distinct數據庫引擎將只需返回單個值而不重複

+0

Btw'User.select('email').uniq.to_sql'在rails3中給出 '=>「SELECT DISTINCT email FROM users」' –

+0

是的,你是對的,很高興知道,thx的反饋:) – rorra