【问题标题】:accessing previous methods in a chain (Ruby (on Rails))访问链中以前的方法(Ruby(on Rails))
【发布时间】:2011-01-31 18:54:22
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: ruby-on-rails method-chaining


    【解决方案1】:

    您的建议不能以简洁明了的方式完成,除此之外,还违反直觉。

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

    希望这会有所帮助。

    【讨论】:

    • 我的问题不是关于如何建立关联。这种情况是为了让我知道一个方法是否知道它被调用的范围,这样 x 在调用 bob.company.x 时会知道它是通过 bob 而不是通过 jane 调用的
    • 我想我很清楚:恕我直言,没有办法知道x,作为company 上的一个方法,是否通过companies[11].xCompany.new.xbob.company.x 被调用.如果company 只有一个employee,这是可能的。但这违背了目的。所以,既然你问了这个问题,我认为你的联想是错误的。因此提出建议。员工的经理不是(单独)与公司相关联,而是与员工相关联。我不知道你在 OO 方面的经验是什么。
    • 谢谢。我只是想知道这是否可能。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多