0

私は解決策を見つけるためにウェブを調べていましたが、役に立ちませんでした。has_many 関連付けに 2 つのテーブルがある問題に取り組んでいます。モデル名は次のとおりです。

 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 のない従業員 (最初の条件、見つからない場合は次)

彼が働いている関連付けられた WorkOrders の最小数を持つ従業員 (または 2 番目の条件)

この新しい work_order の work_orders.employee_id に employee.id を関連付けることができるように、1 つの Employee レコードのみを含むセットを返すアクティブ レコードを使用して、上記の条件を 1 つの FIND SQL に結合しようとしています。

関連するemployee_idのないすべてのwork_ordersを検索する管理パネルを作成し、employee.idを手動で(上記の設定を使用して)指定することで、次に利用可能な従業員でwork_ordersレコードを更新できますが、これをある程度自動化したいと考えています。

提案や疑似コードは役に立ちますか?

4

1 に答える 1

0

従業員からa.id、count(b.employee_id)を選択し、a.id = b.employee_id group by a.id、b.employee_id order by count(a.id)、a.idでwork_ordersbに左結合します。

このクエリは、最も使用頻度の低い従業員を提供します。

単純な翻訳は次のとおりです:(要件に応じて独自の注文を追加します)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 に答える