У меня есть 2 модели со следующими полями для запроса.Ассоциации запросов и желаний
Customer
:first_name
:last_name
:address
:email
Relatives
:first_name
:last_name
:address
:title
Customer
имеет много Relatives
.
Я пытаюсь написать search()
метод, который возвращает коллекцию Customer
записей, где либо поля в Customer
или 1+ его Связанно Relatives
соответствует запросу.
Цель состоит в том, чтобы иметь возможность производить итерацию коллекции Customer
записей. Если customer.relatives.present?
, я буду знать, что нужно прокрутить связанные модели Relative
, снабженные Customer
, - что модели в этой коллекции соответствуют запросу.
настоящее время у меня что-то вроде этого:
class Customer < ActiveRecord::Base
has_many :relatives
def self.search(params={})
cols = %i(address caseworker last_name)
conds = []
cols.reject! { |col| params[col].blank? }
conds << cols.collect { |col| "clients.#{col} like ?" }.join(" or ")
cols.each { |col| conds << "%#{params[col]}%" }
query = self.send(:where, conds)
# @todo query relatives here!
end
end
Где я застревать:
- Я не могу понять, AREL присоединиться к/слияния/союз/(я не знаю, этот термин Я ищу) модели
Customer
, которые не соответствуют запросу, но do имеютRelative
, соответствующие запросу.- Я считаю, что нужно почти идентичны
search()
наRelative
модели - которую я считаю, что могу писать - но я опять не знаете, как заполнить@todo
выше для нетерпеливого нагрузки только теRelative
, которые соответствуют запросу.
- Я считаю, что нужно почти идентичны
Я ищу любой удар в правильном направлении.
Это действительно интересно. Вы знаете о эквиваленте MySQL? – rubyhelpme
Кроме того, 'preload (: relativates)' будет загружать ** всех ** родственников, когда меня интересуют только те, которые специально вызвали «Заказчик» для включения в исходный набор. – rubyhelpme
У меня нет опыта работы с полнотекстовым поиском в MySQL, но Thinking Sphinx (http://pat.github.io/thinking-sphinx/) выглядит многообещающим – messanjah