0

従業員、マネージャー、および企業向けのクラスがあるとしましょう。これらは、期待どおりに継承されActiveRecord、すべて関連付けられています。

Employeeクラスのインスタンスが 2 つありbobjane. 二人とも同じ会社で働いていますが、マネージャーは異なります。

彼らは同じ会社で働いていますが、マネージャーが異なるため、電話をかけbob.company.xたり、別の結果を得たりできるようにしたいと考えています。jane.company.xx を従業員のメソッドとして定義して を呼び出すことを妨げる他の制限がありますがbob.company_x、この例ではより簡単になることがわかります。

x のメソッド定義内で、どの従業員がこのメソッド チェーンを開始したかを知る方法はありますか?

4

1 に答える 1

2

あなたが提案することは、クリーンでシンプルな方法では実行できず、それを除けば、直感に反します。

class Employee
  belongs_to :company
  belongs_to :manager
end

唯一のクリーンなソリューションです。これにより、関係が明確に定義されます。とにかく、これらのリレーションは利用可能である必要がありますbob

あなたが提案するように、あなたが書くことができる解決策はbob.company.my_manager意味がありません。なぜならbob.companyは彼の会社であり、そのレベル ( Company) では についての知識がもうないからbobです。

完全を期すために、実際にはマネージャーは従業員そのものであるため、その関係を少し異なる方法で記述します。

class Employee
  belongs_to :manager, :class => Employee
end

(そしてあなたのemployeesテーブルにフィールドを追加する必要がありますmanager_id)。

お役に立てれば。

于 2011-01-31T20:38:50.980 に答える