建立依赖于他人的关系模型

model relationships dependant on others

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

我需要一个用户,他需要一个管理员。但是,如果用户有一个 Pod,他们的管理器可以从 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

有什么想法吗?

在我看来,这是一个有趣的设计问题,我相信有很多有效的解决方案。这是我想到的第一个。我不会重写关联定义的管理器方法,而是将 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

```

请注意,我使用了保护子句而不是三元运算符,但这只是代码风格上的个人品味问题。