SearchLogic + STI

时间:2009-09-07 22:14:36

标签: ruby-on-rails ruby activerecord searchlogic sti

尝试实现与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;代理商一个名称,代理商二名称

1 个答案:

答案 0 :(得分:0)

我找到了一个似乎运行良好的解决方案,我在艺术家类上添加了一个命名范围:

命名范围:代理商包括,lambda {| c | {:joins =&gt; :agents,:conditions =&gt; {:agents users =&gt; {:company =&gt; c}}}}

搜索字段现在称为搜索[艺术家代理商包括]