0

我一直在网上寻找解决方案,但无济于事。我正在解决一个问题,我们在 has_many 关联中有两个表,这里是模型名称

 class Employee < ActiveRecord::Base     # main table stores all the employee details
       has_many :work_orders
       attributes :id, :name

 class WorkOrder < ActiveRecord::Base   # Work Orders are created by a form
       belongs_to :employee
       attributes :id, :work_details, :employee_id

软件规范是为 WorkOrders 创建一个表单,由一个单独的实体提及所有工作细节(假设一个客户,因此在保存表单细节时,employee_id 为 nil )。此时,在数据库中保存 WorkOrder 的详细信息后,我们需要触发一个自动调度系统,该系统将自动分配具有最少 work_orders 数量的员工,并按以下顺序提供优先权;

没有关联 WorkOrders 的员工(第一个条件,如果未找到,则为下一个)

他正在工作的关联 WorkOrder 数量最少的员工(或第二个条件)

我正在尝试使用活动记录将上述条件耦合到一个 FIND SQL 中,该活动记录将返回一个只有一个员工记录的集合,以便我们可以将 employee.id 与这个新工作订单的 work_orders.employee_id 相关联。

我编写了一个管理面板来查找所有没有关联employee_id 的work_orders,并且可以通过手动提供employee.id(使用上述首选项)来使用下一个可用员工更新work_orders 记录,但我想在某种程度上自动执行此操作。

任何建议或伪代码会有帮助吗?

4

1 回答 1

0

select a.id, count(b.employee_id) from employees a left join work_orders b on a.id = b.employee_id group by a.id, b.employee_id order by count(a.id), a.id

此查询将为您提供最少使用的员工。

简单的翻译是:(根据您的要求添加您自己的订单) Employee.joins("left join work_orders on work_orders.employee_id = employees.id").group("employees.id, work_orders.employee_id")

于 2012-10-22T22:37:52.103 回答