我试图想出一种定义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_id
,manager_custom_id
,manager_email
,manager_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
非常感谢任何想法!
答案 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