個人的には、これを同じテーブルの関連付け列を持つ単一テーブル継承モデルとして処理します。
boss_id
ユーザーテーブルに呼び出されるフィールドを配置します。User
Sorcery認証関連のものと一般的なロジックを備えたメインモデルがあります。その下にあなたが持っているEmployer
とEmployee
。彼らにはboss
:と呼ばれるメソッドがあります。雇用主の場合、これはselfまたはnil(最も意味のある方)を返しますが、従業員の場合、これは実際の関連付けメソッドであり、次のようなものです。
class Employee < User
belongs_to :boss, class_name: 'User'
end
雇用主が招待状を送信するときは、次のように、雇用主に固有の招待状のURLに招待者を誘導します。
http://yoursite.com/employer/3/invitation
ユーザーが自分のアカウントを作成するとき、あなたはそれらを自分の所有する雇用主に関連付けます。
雇用主がデータを表示するときは、usersテーブルを結合テーブルとして使用して、子従業員のデータもプルするようにしてください。
class Employer < User
has_many :employees, class_name: 'User', foreign_key: 'boss_id'
has_many :contacts # Or whatever your application-specific stuff is
# that you want employers to see through their employees
has_many :employee_contacts, through: :employees, source: :contacts
end
データベース内の雇用者に所有権を割り当てる必要がある場合は、オブザーバーを使用して所有モデルの保存を監視します。所有モデルが誰かによって保存されている場合は、boss
その上司のIDに追加の列を設定します。