假设我有员工,经理和公司的课程。这些继承自ActiveRecord
并且都与您期望的相关联。
我有Employee
班的两个实例,bob
和jane
。他们都在同一家公司工作,但有不同的经理。
我希望能够拨打bob.company.x
或jane.company.x
并获得不同的结果,因为尽管他们在同一家公司工作,但他们有不同的经理。还有其他限制阻止我将x定义为员工的方法并调用bob.company_x
,我认为在这个例子中会更简单。
在x的方法定义中,有哪些方法可以让我知道哪个员工启动了这个方法链?
答案 0 :(得分: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
)。
希望这有帮助。