访问链中的先前方法(Ruby(在Rails上))

时间:2011-01-31 18:54:23

标签: ruby-on-rails method-chaining

假设我有员工,经理和公司的课程。这些继承自ActiveRecord并且都与您期望的相关联。

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

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

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

1 个答案:

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

希望这有帮助。