2011-01-31 26 views
0

假设我有员工,经理和公司的类。这些从ActiveRecord继承,并且如您所期望的那样全部关联。访问链中的以前方法(Ruby(on Rails))

我有两个Employee类的实例,bobjane。他们都为同一家公司工作,但拥有不同的经理。

我希望能够拨打bob.company.xjane.company.x并获得不同的结果,因为虽然他们为同一家公司工作,但他们有不同的经理。还有其他一些限制使我不能将x定义为雇员的一种方法,并呼吁bob.company_x,我认为在这个例子中会更简单。

有没有什么办法可以在我的x方法定义中知道哪个员工启动了这个方法链?

回答

2

你提出的建议不能以简单干净的方式完成,除此之外,这是违反直觉的。

class Employee 
    belongs_to :company 
    belongs_to :manager 
end 

是唯一干净的解决方案。这有清楚界定的关系。这些关系无论如何都需要提供:您如何知道bob的经理是哪位?

一个解决方案,为你建议,在那里你可以写bob.company.my_manager没有意义,因为bob.company是他的公司,并在该水平(Company)不存在bob更多的知识。

为了完整起见:实际上是一个经理是员工本身,所以我们会写这种关系有点不同:

class Employee 
    belongs_to :manager, :class => Employee 
end 

(和你的employees表,则需要添加一个字段manager_id)。

希望这会有所帮助。

+0

我的问题不是关于如何设置关联。情况是设法得到在我的观点是否一种方法是否意识到它被称为的范围,以便x知道它是通过bob调用,而不是通过简称bob.company.x – muirbot 2011-02-01 00:13:17