私はRuby on Railsの初心者ですが、この興味深い状況で立ち往生しています:
私は3つのモデルを持っています:
- ユーザー
- 会社
- 計画
私は次の方法でそれらを関連付けたい:
- 会社には_多くのユーザーがいます
ユーザーの所属会社
USERSテーブルのcompany_id列を介して実装
User.Company
またはCompany.Users
正常に動作します。
- プロジェクトhas_and_belongs_to_manyユーザー
ユーザーhas_and_belongs_to_manyプロジェクト
projetcs_usersテーブルで使用するhas_and_belongs_to_manyリレーションを介して実装
Project.Users
またはUser.Projects
正常に動作します。
本当の問題は、次のように参加してもらいたいときに発生します。
- 会社の所有者 (:スルー => ユーザー)
所有者has_one会社
---会社は複数の所有者を持つことができますが、1 人のユーザーが所有できる会社は1 つだけです。彼は複数の会社の所有者になることはできません。
---ユーザーは会社の所有者である場合とそうでない場合がありますが、常に何らかの会社に属しています。---ユーザーが 2 つの会社に所属することはできません。
プロジェクトhas_one Project_manager (:through => ユーザー)
Project_manager belongs_toプロジェクト
---プロジェクトはProject_managerを 1つだけ持つことができますが、1 つは複数のプロジェクトのプロジェクト マネージャーになることができます。
Modelsで関係を定義する方法がわかりません。また、3 つのモデルすべてのテーブル構造はどうあるべきか。
私の目的は達成することです:
Company.所有者
次の方法で実行できます。
@owner = User.find(Company.owner_id)
Project.Project_manager
次の方法で実行できます。
@Project_manager = User.find(Project.project_manager_id)
しかし、そのように機能させたくありません!!
残りは私にとって完全にうまく機能しています。