Поиск сразу нескольких моделей с помощью Ransack - программирование
Подтвердить что ты не робот

Поиск сразу нескольких моделей с помощью Ransack

У меня есть форма поиска в заголовке моего приложения, и я бы хотел использовать эту форму поиска для поиска по нескольким моделям в приложении.

Например, запрос типа /search?q=rails должен инициировать поиск через несколько моделей, таких как Work, Project, User и их определенные атрибуты. Я хотел использовать Ransack, потому что я уже использую его в модели Work в другой области приложения.

Я думаю, что я еще не совсем понимаю Ransack, и в документации всегда указывается, что вы должны определить @q = MyModel.search(params[:q]), чтобы использовать его в форме search_form_for @q. Есть ли способ, которым вам не нужно заранее определять конкретную модель? И просто введите имя параметра, например search_form_for :q?

4b9b3361

Ответ 1

Хорошо, после того, как я задал вопрос, в голову вошел ответ.

Вместо помощника search_form_for теперь я просто использую помощник form_tag следующим образом:

<%= form_tag search_path, method: :get do %>
  <%= text_field_tag :q, nil %>
<%= end %>

и в действии поиска я просто делаю:

q = params[:q]
@works    = Work.search(name_cont: q).result
@projects = Project.search(name_cont: q).result
@users    = User.search(name_cont: q).result

Это работает для меня. Я надеюсь, что это также поможет кому-то еще.