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)
。