为模板项目复制用户的“类型”

时间:2017-12-05 14:55:25

标签: ruby-on-rails database-design

我正在为projects构建模板,其中一部分涉及将模板team_members添加到project,其中team_members充当projects之间的联接表1}}和users

例如,我知道我的project模板将有team_members类型为“Developer”和“Manager”,但我不知道哪个users将填充这些角色模板级别。

如果我用一些JSON数据将其映射出来,这就是它在概念上的样子:

team_member_types: [
  { id: 1, name: "Developer" },
  { id: 2, name: "Manager" },
],

project: { id: 1, title: "Template project title", template: true },

team_members: [
  { project_id: 1, team_member_type_id: 1, user_id: nil }, # => "Developer"
  { project_id: 1, team_member_type_id: 2, user_id: nil }, # => "Manager"
]

当我使用模板制作真实项目时,我想将真实用户添加为team_members,但我想根据我添加它们的角色来过滤users列表上。

例如,当我想为“Developer”角色添加真实user时,我只想查看标记为“Developers”的用户列表。这意味着我在team_member_type表上也有一个users关联。

user: { id: 1, name: "John Smith", team_member_type: "Developer" }

当我在我的表单上添加真实的user

@team_member_type = TeamMemberType.find_by(name: "Developer")
@filtered_users = User.where(team_member_type_id: @team_member_type)

我遇到的问题是,team_member联接表似乎必须在其上关联team_member_type以在模板阶段标记它,但关联的user }还有一个team_member_type与之关联,以便过滤。因此,当我向user添加真实的project时,结果是:

@team_member = TeamMember.find(1)
@team_member.team_member_type.name = "Developer"
@team_member.user.team_member_type.name = "Developer"

我有两种不同的方式存储相同的“数据”。这似乎是一个问题,但我不知道如何用我当前的数据库结构解决它。有没有办法重新组织关联,所以我只将这些数据存储一次?

实际的Rails模型如下所示:

class Project < ApplicationRecord
  has_many :team_members
end

class TeamMember < ApplicationRecord
  belongs_to :project 
  belongs_to :user
  belongs_to :team_member_type
end

class TeamMemberType < ApplicationRecord
  has_many :team_members
  has_many :users
end

class User < ApplicationRecord
  has_many :team_members
  belongs_to :team_member_type
end

0 个答案:

没有答案