私は頭をこれに巻き付けようとして壁に頭をぶつけてきたので、どんなガイダンスも大歓迎です...
次の階層を反映するようにユーザー システムをセットアップしたいと考えています。
User
|- email address
|- password
|- billing information
|- contact information
|- account preferences
|
|=> Agent
|=> - agent-specific information
|=> - has_many Users
|=> - belongs_to Manager
|
|=> Manager
|=> - manager-specific information
|=> - has_many Agents, Users
|
|=> Administrator
|=> - can manage everything
認証と承認を処理するためのDeviseとCanCanUser
のセットアップを備えたモデルが既にあるので、ロールを使用してユーザーのタイプを特定のアクションなどに制限する方法を知っています。
私が迷っているのは、Rails コードとデータベースの両方でこれらのサブクラスの関係を整理する方法です。上からわかるように、Agent
、Manager
、およびAdministrator
すべてが に含まれる情報を共有しますUser
が、それぞれに追加の機能とそれに関連する情報があります。
STI、ポリモーフィック アソシエーション、および自己参照アソシエーションについて読んだことがあります。
STI を使用する場合、テーブルには [ / / ] 固有の情報User
すべてのフィールドが含まれている必要がありますよね? それは私のテーブルを巨大にするでしょう、それは私が避けたいことです. 逆に、ポリモーフィックを使用する場合、他のすべてのタイプのサブクラス テーブルですべての共通情報を複製する必要はないでしょうか?Agent
Manager
Administrator
User
User
User
さらに混乱を招くことに、上記の質問に対する答えがサブクラス間の関係でどのように機能するかについて頭を悩ませることはできません (たとえば、 Manager
has_manyAgents
ですが、両方ともUser
...?? のサブクラスです)。
コードの読みやすさとデータの整合性を十分に考慮し、A が最適なアプローチであり、B またはnがなぜ最適なのかを (Rails の初心者のように) 簡単に説明する詳細な回答を通じて、誰かが私にこれをまっすぐに設定してくれることを本当に感謝しています。比較すると、この状況では適切なアプローチではなく、上記の関係を実装するためのコード例が得られます。この問題を解決したいのですが、それよりも重要なのは、なぜその解決策が機能するのかを知りたいということです!