0

假设我为员工、经理和公司开设了课程。如您所料,这些继承自ActiveRecord并且都关联。

我有两个Employee该类的实例,bob并且jane. 他们都在同一家公司工作,但有不同的经理。

我希望能够打电话bob.company.xjane.company.x得到不同的结果,因为尽管他们为同一家公司工作,但他们有不同的经理。还有其他限制阻止我将 x 定义为员工和调用的方法bob.company_x,我意识到在这个例子中会更简单。

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

4

1 回答 1

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

希望这可以帮助。

于 2011-01-31T20:38:50.980 回答