2011-04-18 62 views
1

我有兩個模型,員工和部門。職位屬於各部門。在選擇標籤中,我只想列出其中有僱員的部門。範圍與協會.any?

現在我有:

@current_company.departments.collect {|d| [d.title, d.id] if d.employees.any?} 

這給我留下了幾個零選擇的選項。我想我可以寫一個depmartments範圍,將工作像@ current_company.departments.with_employees:

scope :with_employees, :where => (self.employees.any?) 

我知道這是行不通的,但我堅持我應該做的事情。

回答

7

記住,一個連接是內部聯接,它不正是你想要的東西 - 寫在加入成爲範圍...

scope :with_employees, :joins => :employees 
+0

+1的可重用性,燦爛的清晰度,可擴展性,簡單性和效率。 – 2011-04-19 14:10:52

+0

我忘記提及僱員屬於部門:通過=>:職位。仍然適用? – Jarrett 2011-04-19 23:12:57

+0

希望你已經嘗試過,發現是的,它也可以通過連接表工作。現在是時候接受我的答案,餵我;) – smathy 2011-04-20 19:02:53

0

如果不需要爲零選擇選項,爲什麼你不能使用.compact方法?

@current_company.departments.collect {|d| [d.title, d.id] if d.employees.any?}.compact 
0

或者另一種方式來做到這一點...

@current_company.departments.reject {|d| d.employees.empty?}.collect {|d| [d.title, d.id]} 

紅寶石的美是有這麼多的方式做任何事情;)