2011-06-27 21 views
2

私はUserProjectというモデルを持っています。ユーザーは複数のプロジェクトを持つことができ、プロジェクトは複数のユーザーを持つことができます。これはもちろん、has_and_belongs_to_manyの関連付けでは簡単です。私の問題は、プロジェクトを作成したユーザーを追跡したいということです。これは私のProjectモデルのbelongs_to :userで簡単になります。問題は、ユーザが既にProjectでHABTM関係を持っている場合にUserhas_many :projectsを実行することは意味がありません。ここでRails HABTMとbelongs_toはユーザ/プロジェクトを関連付けるために

は私が最終的に達成したいものだ。

# building a project with the currently logged in user 
current_user.projects.build(...) 

# now when a user wants to add another user to this project 
project = current_user.projects.find(...) 
project.users << User.find(...) 

# grabbing information 
some_project.user #=> The user who created this project 
some_project.users #=> The array of User objects associated 
some_user.projects #=> The array of Project objects associated 

将来的には、UserUserは多くを持っているし、多くのグループに属しているでしょう両方Group、との関係と同じ種類のを持っています可能性があります。しかし、私はまたの作成者Groupに追跡したいと思います。

私は何かが欠けている可能性が高いです。これを達成するための共通の方法は何ですか?

それは明確にすることができます場合は、可能な構成は、以下にレイアウトされています

  • グループ
    • has_and_belongs_to_manyアソシエーション:ユーザ
    • belongs_toの:ユーザー
    • にhas_many:プロジェクト
    • のみUser作成する能力があるはずですGroup
  • ユーザー
    • has_and_belongs_to_manyアソシエーション:グループ
    • にhas_many:プロジェクト
    • 偉大なグループやプロジェクト、そしてまた、両方
  • プロジェクトに所属することができ
    • has_and_belongs_to_manyアソシエーション:ユーザー
    • belongs_to:group
    • UserGroupの両方が、私はまた、各団体のための簡単なhas_and_belongs_to_manyを行うと、例えばcreator_idを含めて、これを自分自身を追跡しようとしたProject

を作成する能力を持っている必要があります。たとえば.. Project.create(:creator_id => current_user.id)しかし、これはハッキリと思われ、私は彼らがこれを行うためのより良い方法になると確信していた。シンプルなものを見逃してしまった場合、私の無知に対する謝罪。

答えて

1

これをもう一度読んで、グループまたはユーザーのいずれかのプロジェクトのオーナーを1人持ちたいとします。プロジェクトモデルからポリモーフィックなbelongs_to関係としてそれを格納します。すなわち、 owner_type => 'User'/'Group' owner_id => 123

このグループに関連付けられている他のユーザーは多かれ少なかれ、結合テーブルが必要です。

あなたのグループモデルは、ユーザーとの関係が多岐にわたる別々のモデルであるため、作成したユーザーをグループモデルのフィールドとして単純に保存することができます。 :user_id 123.

+0

こんにちは、あなたの答えに感謝します。私はあなたが必要なものに合っていると思っています。私はこれらの3つのモデルの関係とちょっと混乱しているので、もっと具体的な答えを探していました。Ryanは2を使い、その関係は少し違います。私は今日それを与えて、他の人が答えているかどうかを見極めるつもりです。再度ありがとう –

+0

私の編集を見てください。申し訳ありませんが、私はあなたの質問をすり抜けたので、間違った道を先に導いていたと思います。あなたが何かを理解していなければ私に知らせてください。多形性には説明が必要なので、そこに鉄道があります。http://railscasts.com/episodes/154-polymorphic-association – mark

+0

ああ、ありがとうMark、それは私が探していたものです! –

関連する問題