Ruby on rails ActionRecord建模:具有多个经理的员工
这应该很容易。我想我一定是被命名问题缠住了 “经理”和“下属”(员工)都属于“人”类 以下是我所拥有的:Ruby on rails ActionRecord建模:具有多个经理的员工,ruby-on-rails,activerecord,model,Ruby On Rails,Activerecord,Model,这应该很容易。我想我一定是被命名问题缠住了 “经理”和“下属”(员工)都属于“人”类 以下是我所拥有的: class Person < ActiveRecord::Base has_many :person_manager_assignments has_many :managers, :through => :person_manager_assignments has_many :subordinates, :through => :person_manager
class Person < ActiveRecord::Base
has_many :person_manager_assignments
has_many :managers, :through => :person_manager_assignments
has_many :subordinates, :through => :person_manager_assignments
end
class PersonManagerAssignment < ActiveRecord::Base
has_one :subordinate, :class_name => "Person", :foreign_key => "id", :primary_key => 'person_id'
has_one :manager, :class_name => "Person", :foreign_key => "id", :primary_key => 'manager_id'
end
查看where子句中匹配“person\u id”的where位?我需要“manager_id”,但搞乱personmanagerasignment协会的外键和主键值似乎并没有什么帮助
有什么想法吗?我猜您的PersonManagerAssignment表有一个person\u id和一个manager\u id,模型中的关联像has\u one:person和has\u one:manager。如果是这样的话,我建议改变这种联系
has_one :person
对此
has_one :subordinate, :class_name => "Person", :foreign_key => "person_id"
然后你有很多:下属应该按预期工作。classpersonclass Person < ActiveRecord::Base
has_many :subordinates :through => :person_manager_assignments
has_many :managers, :through => :person_manager_assignments
end
class PersonManagerAssignment < ActiveRecord::Base
belongs_to :subordinate, :class_name => 'Person'
belongs_to :manager, :class_name => 'Person'
end
有许多:下属:通过=>:人员\u经理\u任务
有多个:经理,:至=>:个人\u经理\u分配
结束
类personmanagerasignment答案基本上如下所示: 所以我想你需要这个:
class Person < ActiveRecord::Base
has_many :person_manager_assignments
has_many :managers, :through => :person_manager_assignments
has_many :subordinate_relationships, :class_name=>"PersonManagerAssignment", :foreign_key=>"manager_id"
has_many :subordinates, :through => :subordinate_relationships, :source=>:person
end
class-Person:个人\u经理\u分配
有很多:从属关系,:class\u name=>“PersonManagerAssignment”,:foreign\u key=>“manager\u id”
有很多:下属,:通过=>:下属关系,:来源=>:个人
结束
及
class PersonManagerAssignment“个人”
结束
继续吧。你的人事管理模式是什么样子的?我已经进一步澄清了这个问题。我基本上需要控制WHERE子句中使用的ID。我在原始描述中添加了您的更改,但无效。有很多:Person类中的下属似乎只在Person self和Person的经理之间切换,但不是那些自己被指派为经理的人。加入模型与它所涉及的模型有着
关系。没错。好吧,让我重新思考一下,如果我没有从中找到答案,请编辑我的问题。谢谢这基本上就是我所拥有的,然后是Person。下属返回他们自己或他们的经理,但不是正确的数据,即所有拥有此人作为经理的自我的人,例如,manager\u id==self.id。我认为他的PersonManagerAssignment表架构需要将:foreign\u key=>person\u id
添加到belowns\u to:substance
调用中。我再次更新了我的问题以反映这一新信息。Person.managers可以工作,但Person.substances在WHERE子句中匹配了错误的值。有什么想法吗?你不应该需要:foreign\u key=>person\u id
,因为这可以从class\u name=>“person”推断出来。我想我没有:foreign\u key=>person\u id。太棒了,谢谢!我必须在“has_many:subficates”“subficate”上创建:source,并且必须保持人事管理任命与以前相同。
class Person < ActiveRecord::Base
has_many :person_manager_assignments
has_many :managers, :through => :person_manager_assignments
has_many :subordinate_relationships, :class_name=>"PersonManagerAssignment", :foreign_key=>"manager_id"
has_many :subordinates, :through => :subordinate_relationships, :source=>:person
end
class PersonManagerAssignment < ActiveRecord::Base
belongs_to :person
belongs_to :manager, :class_name=>"Person"
end