0

ユーザーモデルがあります

class User < ActiveRecord::Base
  has_many :projects
end

私はプロジェクトモデルを持っています

class Project < ActiveRecord::Base
  belongs_to :user
end

明らかに現在、各プロジェクトはユーザーによって所有されており、プロジェクトごとに 1 人のユーザーしか存在できません。ここで、モデルが 2 つのモデル間の別の関係を表すようにしたいと考えています。プロジェクトの所有者に関係なく、ユーザーが複数のプロジェクトをフォローできるようにしたいと考えています。has_many :through を使用して結合を作成する必要があることはわかっていますが、モデルを変更して現在の関係を維持し、新しい関係を追加する方法について頭を悩ませることはできません。

4

2 に答える 2

1

その場合、show/index アクションProject.allで、プロジェクト テーブル内のすべてのプロジェクト ( ) を表示します。このようにして、すべてのユーザーがすべてのプロジェクトにアクセスできます。次に、編集アクションで、user.projects.all特定のユーザーのプロジェクトを表示するために使用します。これで問題は解決するはずです。ここでこれ以上関連付ける必要はないと思います。

更新:
これで十分です:

class Project < ActiveRecord::Base
belongs_to :user

class User < ActiveRecord::Base
has_many :projects_followed, :through => :projects
user has_many :projects_owned, :through => :projects

もう 2 つの関係を作成したくない場合は、1 つだけ作成します
class ProjectsSubscribed
belongs_to :project
。3 つのフィールド: project_id、is_owned、is_followed

于 2012-05-17T10:30:18.413 に答える
0

次の関係を試してください。

class User < ActiveRecord::Base
  has_many :followers
  has_many :projects, :through => :followers
end

class Follower < ActiveRecord::Base
  belongs_to :user
  belongs_to :project
end

class Project < ActiveRecord::Base
  has_many :followers
  has_many :users, :through => :followers
end

注意:リレーションシップモデルを独立したエンティティとして操作する必要がある場合は、has_many:throughリレーションシップを使用できます。リレーションシップモデルで何もする必要がない場合は、has_and_belongs_to_manyリレーションシップを設定する方が簡単な場合があります。

お役に立てば幸いです。

于 2012-05-17T11:02:04.967 に答える