我正在尝试做某事,不确定是否可能...
我需要一个需要管理员的用户。但是,如果用户有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
有什么想法吗?
答案 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
```
请注意,我使用了保护子句而不是三元运算符,但这只是代码风格方面的个人喜好。