) и проблему я пытаюсь решить. Я отмечу ваш ответ как принятый через некоторое время, если только не появится лучший. :)

аюсь создать функцию поиска на сайте и хочу, чтобы пользователь мог искать несколько слов, выполняя подстроку, сопоставляя ее с критериями, которые существуют в различных моделях.

Для примера давайте предположим, что у меня есть следующие модели:

РаботникКомпанияМуниципалитетокруг

В округе есть несколько муниципалитетов, в которых есть несколько компаний, в которых работают несколько сотрудников.

Я хочу, чтобы поиск мог выполнять поиск по комбинации 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 не содержит никаких столбцов, поэтому его нельзя использовать для построения запроса. На данный момент я немного застрял, потому что я не знаю, как получить работающий построитель запросов.

Ответы на вопрос(1)

Ваш ответ на вопрос