Rails belongs_to与多个外键关联

时间:2017-04-03 10:21:40

标签: ruby-on-rails

我试图想出一种定义belongs_to关联的方法,其中目标记录可以通过4个不同的列之一找到。设置:

用户

class User < ActiveRecord::Base
  has_many :managerships, foreign_key: :employee_id
  has_many :managers, through: :managerships
end

管理者来​​说

class Managership < ActiveRecord::Base
  belongs_to :employee, class_name: 'User'
  belongs_to :manager # <-- ideas?
end

managerships表格包含4列manager_idmanager_custom_idmanager_emailmanager_saml_id,我们可以用来查找用户的经理。对于每个Managership,只会出现其中一列。

我正在寻找一种方法可以致电user.managers(经理是User),以便它返回managerships.manager_id = users.id OR managerships.manager_custom_id = users.custom_id OR managerships.manager_email = users.email OR managerships.manager_saml_id = users.saml_id

所有用户

非常感谢任何想法!

1 个答案:

答案 0 :(得分:0)

虽然,我怀疑一个关系的4个外键是一个好主意,从User获取管理器的一种方法是使用方法而不是范围。但是,如果您这样做,则无法使用#joins

class User
  def managers
   self.class.joins(:managerships).where('managerships.manager_id = ? OR managerships.manager_custom_id = ? OR managerships.manager_email = ? OR managerships.manager_saml_id', id, custom_id, emd, saml_id)
  end
end
Managership {p>你可以做类似的事情,声明#manger而不是belongs_to :manager