Я пытаюсь создать поисковую функцию на сайте и хочу, чтобы пользователь мог выполнять поиск по нескольким словам, выполняя подстроку, соответствующую критериям, существующим в различных моделях.
РадиВ этом примере, скажем, у меня есть следующие модели:
- Сотрудник
- Компания
- Муниципалитет
- Округ
В округе есть несколько муниципалитетов, в которых есть несколько компаний, в которых работают несколько сотрудников.
Я хочу, чтобы поиск мог выполнять поиск по комбинации Employee.firstname, Employee.lastname, Company.name, Municipality.name и County.name, и я хочу, чтобы конечным результатом были экземпляры Employee.
Например, поиск строки "joe tulsa" должен вернуть всех сотрудников, где оба слова можно найти где-то в свойствах, которые я назвалв предыдущем предложении.Я получу несколько ложных срабатываний, но, по крайней мере, я должен получить каждого сотрудника по имени "Джо" в округе Талса.
Я пробовал пару подходов, но я не уверен, что ухожуправильный путь.Я ищу хороший способ сделать это с помощью RoR, и я надеюсь, что кто-то с большей мудростью RoR может помочь наметить правильное решение.
Что я пробовал:
Я не очень разбираюсь в таком поиске, но вне RoR я бы вручную создал оператор SQL, чтобы объединить все таблицы, создать предложения where для каждого отдельного слова поиска, охватывающего разные таблицы.Возможно, использовать строитель.Затем просто выполните запрос и выполните циклический просмотр результатов, вручную создайте экземпляры объектов Employee и добавьте их в массив.
Чтобы решить эту проблему в RoR, я:
1) Привязка к имениОбласти в том, что в моем проекте соответствует модели Employee, но я застрял, когда мне нужно было объединить таблицы в двух или более «шагах» (муниципалитет и округ).
2) Создан вид (называемый «search_view ") объединение всех таблиц для упрощения запроса.Затем подумал, что я буду использовать Employee.find_by_sql () в этой таблице, что даст мне эти хорошие объекты Employee.Я подумал, что для создания SQL воспользуюсь компоновщиком, и мне показалось, что нужно использовать Arel, поэтому я попытался сделать что-то вроде:
view = Arel::Table.new(:search_view)
Но полученный Ariel :: Table не содержитлюбые столбцы, так что это не годится для построения моего запроса.На данный момент я немного застрял, так как не знаю, как получить работающий построитель запросов.