модель отношений зависит от других - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь что-то сделать, я не уверен, возможно ли это ...

Мне нужен пользователь, которому нужен менеджер. НО, если у пользователя есть 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

Есть мысли?

1 Ответ

0 голосов
/ 14 ноября 2018

На мой взгляд, это интересная проблема дизайна, и я уверен, что есть много правильных решений.Вот первое, что приходит мне в голову.Вместо переопределения метода менеджера, который определяется ассоциацией, я бы переименовал ассоциацию 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

`` `

Обратите внимание, что я использовал условие охраны вместо троичного оператора, но это только вопрос личного вкуса в стиле кода.

...