2011-04-18 54 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]} 

红宝石的美是有这么多的方式做任何事情;)