依赖他人的模型关系

时间:2018-11-14 18:01:01

标签: ruby-on-rails activerecord relational-database

我正在尝试做某事,不确定是否可能...

我需要一个需要管理员的用户。但是,如果用户有Pod,则可以从Pod.owner派生其经理(实际上,必须是Pod.owner)。

所以,像这样:

class User
   belongs_to :pod, optional: true 
   belongs_to :manager, class_name: "User", foreign_key: "report_id", optional: true
   ???
end

本质上,如果:pod存在,则不需要管理器,因为:manager将是pod.owner。

因为我是个白痴,所以我试图用猴子来修补它:

def manager
   (pod.nil?) ?  manager :  pod.owner
end

我将把它留给用户作为练习,以了解为什么这是胡说八道:D

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

在我看来,这是一个有趣的设计问题,并且我相信有很多有效的解决方案。这是我想到的第一个。我不会覆盖由关联定义的manager方法,而是将manager关联重命名为direct_manager。我将其角色明确化。然后,您可以定义manager,因为它不再定义。最终结果将是:

class User
  belongs_to :pod, optional: true 
  belongs_to :direct_manager, class_name: "User", foreign_key: "report_id", optional: true

  def manager
    return pod.owner if pod.present?
    direct_manager
  end
end

```

请注意,我使用了保护子句而不是三元运算符,但这只是代码风格方面的个人喜好。