0

我有一个用户模型:

class User < ActiveRecord::Base
  has_many :projects, dependent: :destroy
end

和一个项目模型:

class Project < ActiveRecord::Base
  belongs_to :user
end

如果我想aUser可以资助Projects,aProject可以被很多人资助Users怎么办?

这意味着我得到了一个多对多的关系,我需要一个额外的中间表。叫它user_projects

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

但是在实施第三个模型之前,我该如何处理模型之间的先前关系?

如果我有中间表,我如何知道哪个项目属于哪个用户?

我会按以下方式修改表格吗?

class User < ActiveRecord::Base
  has_many :projects, through: :user_project, dependent: :destroy
  has_many :user_projects
end

class Project < ActiveRecord::Base
  has_many :user_projects
  has_many :users, through: user_project
end
4

1 回答 1

0

您是否需要中间表取决于您是否需要与用户/项目对存储任何关联数据——例如美元金额或日期信息或角色等。

如果您不需要存储任何其他内容,则只需使用 HABTM 关系。否则,您的最终解决方案将是可行的方法。

我个人不喜欢选择“user_project”,因为它太接近 HABTM 的“users_projects”。也许像 ProjectMember 或 ProjectFunder 或 Funding 这样的东西会更好,但这取决于您需要存储哪些额外数据。

于 2013-07-26T22:59:03.977 回答