Ruby on rails Rails 3奇怪的关联:树中的项目和员工

Ruby on rails Rails 3奇怪的关联:树中的项目和员工,ruby-on-rails,activerecord,has-and-belongs-to-many,Ruby On Rails,Activerecord,Has And Belongs To Many,嗨,伙计们,我必须使现有的模式适应新的关系。我有这个: 一个项目有很多员工。 项目的员工是按某种层次结构组织的(没什么特别的,我解决了这个问题,为每个员工添加了一个父id来构建“树”) class员工'Employee' 有多个:子项,:class\u name=>'Employee',:foreign\u column=>'parent\u id' 结束 class项目

嗨,伙计们,我必须使现有的模式适应新的关系。我有这个:

一个项目有很多员工。
项目的员工是按某种层次结构组织的(没什么特别的,我解决了这个问题,为每个员工添加了一个父id来构建“树”)

class员工'Employee'
有多个:子项,:class\u name=>'Employee',:foreign\u column=>'parent\u id'
结束
class项目
这样做很有魅力,现在新的要求是:员工可以同时参与多个项目,并且根据项目的不同,层次结构也会有所不同

所以我想我需要一个新表来构建HABTM,需要一个新类来访问父id来构建树。差不多

class ProjectEmployee < AR:Base
   belongs_to :project
   belongs_to :employee
   belongs_to :parent, :class_name => 'Employee' # <--- ??????
end

class Project < AR:Base
   has_many :project_employee
   has_many :employees, :through => :project_employee
end

class Employee < AR:Base 
   has_many :project_employee
   has_many :projects, :through => :project_employee
end
class项目员工“员工”\35;:项目\u员工
结束
类别员工<应收账款:基数
有很多:项目员工
拥有多个:项目,:至=>:项目\u员工
结束
如何访问给定项目的员工的父级和子级?我需要根据需要从项目员工中添加和删除孩子


谢谢大家!

为了更好的区分,不得不重新命名,感觉还是有点笨拙

class Person < ActiveRecord::Base
  has_many :project_roles
  has_many :projects, :through => :project_roles
end

class Project < ActiveRecord::Base
  has_many :project_roles
  has_many :persons, :through => :project_roles
end

class ProjectRole < ActiveRecord::Base
  belongs_to :person
  belongs_to :project
  belongs_to :manager, :class_name => "ProjectRole"
  has_many :subordinates, :class_name => "ProjectRole", :foreign_key => "manager_id"
end
添加人:

project.project_roles.create(:person => person, :manager => manager)
person.project_roles.find_by_project_id(project.id).destroy
删除人:

project.project_roles.create(:person => person, :manager => manager)
person.project_roles.find_by_project_id(project.id).destroy
--编辑


在这里可能会有一些用处。

为了更好的区分,不得不重新命名,感觉还是有点笨拙

class Person < ActiveRecord::Base
  has_many :project_roles
  has_many :projects, :through => :project_roles
end

class Project < ActiveRecord::Base
  has_many :project_roles
  has_many :persons, :through => :project_roles
end

class ProjectRole < ActiveRecord::Base
  belongs_to :person
  belongs_to :project
  belongs_to :manager, :class_name => "ProjectRole"
  has_many :subordinates, :class_name => "ProjectRole", :foreign_key => "manager_id"
end
添加人:

project.project_roles.create(:person => person, :manager => manager)
person.project_roles.find_by_project_id(project.id).destroy
删除人:

project.project_roles.create(:person => person, :manager => manager)
person.project_roles.find_by_project_id(project.id).destroy
--编辑


在这里可能有一些用处。

child的复数形式是children,Rails知道这一点rails是的,但我没有:P固定了“child”的复数形式是“children”,rails知道这一点rails是的,但我没有:P fixedgreat!有没有一种方法可以直接访问经理的所有下属?(例如,允许我使用manager.subfilians可能是
项目角色中的一种方法,就像
经理一样。添加作为下属(a,b,c)
。太好了!有没有一种方法可以直接“rails”访问经理的所有下属?(例如,允许我使用manager.subfilians,这可能是
ProjectRole
中的一种方法,就像
manager.add\u as\u subfiliant(a,b,c)