【发布时间】:2015-11-29 02:48:28
【问题描述】:
我在我的 Rails 应用程序 (Rails 4) 中使用了大量范围搜索,并且在我必须使用连接子句的问题上陷入困境。
我有一个有很多员工的班级公司。每个员工都有一个 WorkId(1 到 5)。
编辑(2015-11-29):公司和员工之间的关系是通过一个“company_employee_relations”表来定义的,该表由company_id和employee_id组成
我需要在搜索范围内进行搜索:
至少有 5 名员工且 WorkID=1 的公司
我已经在某种程度上做到了这一点:
scope :has_several_active_employees, -> { where(:id => (Company.joins(:employees).group("companies.id").having("count(employees.work_id = 1) > 4")).collect(&:id)) }
这带来了正确的解决方案,但是当我尝试将其与以下范围匹配时会导致一些模棱两可的样式问题:
scope :is_active, -> { where(:active => true) }
这边
Company.is_active.has_several_active_employees
此外,这似乎不是一个非常优雅的解决方案,而且速度非常慢。
我需要的是“进入连接子句,然后再次退出”,这样我就可以链接这些范围,而不会最终导致模棱两可的问题。
编辑:我还应该提到,更改“is_active”不是一个可行的选择,因为我有几个这样的用途。基本上,问题需要从源头解决,即在“has_several_active_employees”范围内,这样它就不会在其他范围或视图等中中断。
我能做什么?
【问题讨论】:
标签: ruby-on-rails join