1

我有两个模型,员工和部门。员工通过职位属于部门。在一个选择标签中,我想只列出有员工的部门。

现在我有:

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

这给我留下了几个零选择选项。我想我可以为部门编写一个范围,就像@current_company.departments.with_employees:

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

我意识到这行不通,但我坚持我应该做的事情。

4

3 回答 3

7

请记住,连接是内部连接,它完全符合您的要求 - 将连接编写为范围......

scope :with_employees, :joins => :employees
于 2011-04-18T18:53:44.840 回答
0

如果您不需要 nil 选择选项,为什么不能使用.compact方法?

@current_company.departments.collect {|d| [d.title, d.id] if d.employees.any?}.compact
于 2011-04-18T19:14:50.380 回答
0

或者另一种方式来做到这一点......

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

Ruby 的美妙之处在于有很多方法可以做任何事情;)

于 2011-04-18T19:30:05.107 回答