私はUser
とProject
というモデルを持っています。ユーザーは複数のプロジェクトを持つことができ、プロジェクトは複数のユーザーを持つことができます。これはもちろん、has_and_belongs_to_many
の関連付けでは簡単です。私の問題は、プロジェクトを作成したユーザーを追跡したいということです。これは私のProject
モデルのbelongs_to :user
で簡単になります。問題は、ユーザが既にProject
でHABTM関係を持っている場合にUser
のhas_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
将来的には、User
がUser
は多くを持っているし、多くのグループに属しているでしょう両方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
User
とGroup
の両方が、私はまた、各団体のための簡単なhas_and_belongs_to_many
を行うと、例えばcreator_id
を含めて、これを自分自身を追跡しようとしたProject
を作成する能力を持っている必要があります。たとえば.. Project.create(:creator_id => current_user.id)
しかし、これはハッキリと思われ、私は彼らがこれを行うためのより良い方法になると確信していた。シンプルなものを見逃してしまった場合、私の無知に対する謝罪。
こんにちは、あなたの答えに感謝します。私はあなたが必要なものに合っていると思っています。私はこれらの3つのモデルの関係とちょっと混乱しているので、もっと具体的な答えを探していました。Ryanは2を使い、その関係は少し違います。私は今日それを与えて、他の人が答えているかどうかを見極めるつもりです。再度ありがとう –
私の編集を見てください。申し訳ありませんが、私はあなたの質問をすり抜けたので、間違った道を先に導いていたと思います。あなたが何かを理解していなければ私に知らせてください。多形性には説明が必要なので、そこに鉄道があります。http://railscasts.com/episodes/154-polymorphic-association – mark
ああ、ありがとうMark、それは私が探していたものです! –