我有一个用户模型:
class User < ActiveRecord::Base
has_many :projects, dependent: :destroy
end
和项目模型:
class Project < ActiveRecord::Base
belongs_to :user
end
如果我希望User
能够为Projects
提供资金,Project
可以由多名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
答案 0 :(得分:0)
您是否需要中间表取决于您是否需要存储与用户/项目对相关的任何数据 - 例如美元金额或日期信息或角色等。
如果您不需要存储任何其他内容,则只需使用HABTM关系即可。否则,您的最终解决方案将是可行的方法。
我个人不喜欢'user_project'的选择,因为它太靠近HABTM的'users_projects'了。也许像ProjectMember或ProjectFunder或Funding这样的东西会更好,但这取决于你需要存储多少额外数据。