私のアプリケーションには2つのテーブルと4つのモデルがあります。最初のモデルは会社であり、それは企業テーブルを持っています。他のモデルは従業員、運転手、監督者です。私はアプリケーションで単一のテーブル継承を使用しました。Ruby On Rails自己結合関連
会社モデル:
class Company < ApplicationRecord
has_many :employees
end
とテーブル構造
ID NAME
1 XXX company
、従業員、ドライバーおよびSupervisorモデル:
class Employee < ApplicationRecord
belongs_to :company
end
class Chef < Employee
end
class Driver < Employee
end
class Supervisor < Employee
end
と従業員のテーブル構造:
ID NAME COMPANY_ID TYPE
1 Jo 1 Supervisor
2 Jack 1 Driver
3 William 1 Driver
4 Avarell 1 Driver
5 Sam 1 Chef
私がする必要があるのは、スーパーバイザがhas_manyアソシエーションを介して同じ会社に所属するすべてのドライバにアクセスするようにすることです。
私はスーパーバイザクラスに次のコードを試してみました:
has_many :drivers, ->(supervisor) {where(company: supervisor.company)}
しかし、レールは次のSQLを作成し、それは私がレールがしたい私は
SELECT `employees`.* FROM `employees` WHERE `employees`.`type` IN ('Driver') AND `employees`.`supervisor_id` = 4 AND `employees`.`type` IN ('Driver', 'Supervisor') AND `employees`.`company_id` = 1
を期待していものではありませんアサーションを構築している間にこのようなクエリを作成します。
SELECT `employees`.* FROM `employees` WHERE `employees`.`type` IN ('Driver') AND `employees`.`company_id` = 1
どれsuggesstions、
感謝。
'Driver'' has_one:supervisor'?あるいは、その協会は関係ありませんか? –