Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ActionRecord建模:具有多个经理的员工_Ruby On Rails_Activerecord_Model - Fatal编程技术网

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'Person' 属于:经理,:class\u name=>“个人” 结束
答案基本上如下所示:

所以我想你需要这个:

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