0

尝试实现使用与 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=>:agent 或类似的东西),或者我是否会需要修补 searchlogic 或我可以做些什么来完成这个。

我想到的另一个选项,我害怕这个想法,是在用户表上添加一个字段,其中包括个人机构的列表。例如 users.agencies => 机构一名称,机构二名称

4

1 回答 1

0

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

命名范围:机构包括,lambda { |c| { :joins=> :agents,:conditions => { :agents users => { :company => c } } } }

搜索字段现在称为搜索[艺术家机构包括]

于 2009-09-07T23:12:32.207 回答