尝试实现与STI使用关联的搜索逻辑搜索,但我遇到的问题是它不是选择STI记录作为子类而是选择父类。
实施例:
class Users
end
class Artist < User
has many :agents, :through => :agents artists
end
class Agent < User
has many :artists, :through => :agents artists
end
当我搜索“像这样的艺术家代理公司”时,它会根据代理作为用户而不是代理进行搜索:
select * from users WHERE users.company LIKE
而不是
select * from users AS agents WHERE agents.company LIKE
想知道我是否可以在ActiveRecord类级别预先解决这个问题(例如,在关联中,我认为如果你可以指定代理将被加载:as =&gt;:代理或其他类似的东西),或者如果我需要修补searchlogic或我还能做些什么来完成这个。
我想到的另一个选项是,我担心这个想法是在用户表上添加一个字段,其中包含该人员代理的列表。例如users.agencies =&gt;代理商一个名称,代理商二名称
答案 0 :(得分:0)
我找到了一个似乎运行良好的解决方案,我在艺术家类上添加了一个命名范围:
命名范围:代理商包括,lambda {| c | {:joins =&gt; :agents,:conditions =&gt; {:agents users =&gt; {:company =&gt; c}}}}
搜索字段现在称为搜索[艺术家代理商包括]