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=>:agent или что-то в этом роде), или если бы я нужно исправить searchlogic или что еще я мог бы сделать для этого.

Еще один вариант, который пришел мне в голову, и я с ужасом отношусь к этой идее, состоит в том, чтобы добавить поле в пользовательскую таблицу, содержащее список агентств человека. например, users.agencies => Имя одного агентства, Имя второго агентства


person Gordon Isnor    schedule 07.09.2009    source источник


Ответы (1)


Я нашел решение, которое, кажется, работает хорошо, я добавил именованную область в класс художника:

именованная область: агентства включают, лямбда { |c| { :joins=> :agents,:conditions => { :agents users => { :company => c } } } }

Поле поиска теперь называется поиском [включая агентства художников]

person Gordon Isnor    schedule 07.09.2009