轨道上的红宝石 - 两个模型可以互相拥有吗?

时间:2015-11-24 19:26:37

标签: ruby-on-rails ruby

我的小组正在为我们的课程制作项目管理系统,我的工作是当用户登录时,他们看到他们所属的项目,以及列出的项目都有成员该项目的当前成员名单。

(以后还需要添加/删除成员函数)

我的问题是,由于该组的其余部分已经设置了以便项目属于用户,是否可以让用户属于项目以便设置此成员列表并执行我所做的事情。在说什么?

1 个答案:

答案 0 :(得分:1)

您所描述的关系不是一对一的:

  

用户登录时,他们会看到项目,他们是

的一部分

这意味着用户可以拥有多个项目。你还指定了:

  

[项目有]该项目的当前成员列表

这意味着一个项目可以有多个用户

总之,您需要在用户和项目模型之间建立多对多关系

这是Rails中基本的多对多关系:

class User < ActiveRecord::Base
  has_many :user_projects
  has_many :projects, through: :user_projects

class Project < ActiveRecord::Base
  has_many :user_projects
  has_many :users, through: :user_projects

class UserProject < ActiveRecord::Base
  belongs_to :user
  belongs_to :project
  validates :user_id, :project_id, presence: true
  • UserProject模型是一个连接表。我在代码中所做的是一个显式的has_and_belongs_to_many,它可以让你对连接表有更多的控制权。 (例如:在role表格中添加UserProject列,其中包含project_creatorsimple_member等数据
  • UserProject模型可以命名为Membership更明确。我使用了两种型号&#39;要生成UserProject的名称,就像我们在Rails&#39;中所做的那样。命名惯例。