) и проблему я пытаюсь решить. Я отмечу ваш ответ как принятый через некоторое время, если только не появится лучший. :)
аюсь создать функцию поиска на сайте и хочу, чтобы пользователь мог искать несколько слов, выполняя подстроку, сопоставляя ее с критериями, которые существуют в различных моделях.
Для примера давайте предположим, что у меня есть следующие модели:
РаботникКомпанияМуниципалитетокругВ округе есть несколько муниципалитетов, в которых есть несколько компаний, в которых работают несколько сотрудников.
Я хочу, чтобы поиск мог выполнять поиск по комбинации 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 воспользуюсь компоновщиком, и мне показалось, что Арел - то, что нужно использовать, поэтому я попытался сделать что-то вроде:
view = Arel::Table.new(:search_view)
Но полученный Ariel :: Table не содержит никаких столбцов, поэтому его нельзя использовать для построения запроса. На данный момент я немного застрял, потому что я не знаю, как получить работающий построитель запросов.