如何在相同模型之间创建多个关系

时间:2012-05-17 10:00:43

标签: ruby-on-rails activerecord models

我有一个用户模型

class User < ActiveRecord::Base
  has_many :projects
end

我有一个项目模型

class Project < ActiveRecord::Base
  belongs_to :user
end

显然现在每个项目都由用户拥有,每个项目只能有一个用户。我现在想让我的模型代表两个模型之间的另一种关系。我希望用户能够关注多个项目,无论谁拥有项目。我知道我将不得不使用has_many:through并创建一个连接,但我无法解决如何更改模型以保持当前关系并添加新关系。

2 个答案:

答案 0 :(得分: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

如果您不想创建另外两个关系,请只创建一个:
class ProjectsSubscribed
belongs_to :project
有三个字段: project_id,is_owned,is_followed

答案 1 :(得分: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关系可能更简单。

希望它有所帮助。