建立依赖于他人的关系模型
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
```
请注意,我使用了保护子句而不是三元运算符,但这只是代码风格上的个人品味问题。
我正在尝试做某事,我不确定是否可行...
我需要一个用户,他需要一个管理员。但是,如果用户有一个 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
```
请注意,我使用了保护子句而不是三元运算符,但这只是代码风格上的个人品味问题。