Как я могу искать принадлежащее_все с использованием гема searchkick с помощью collection_select?

У меня в приложении две основные модели: "Бизнес" и "Категория". В настоящее время у меня есть текстовое поле поиска, которое работает просто отлично, но я также пытаюсь реализовать возможность для пользователей искать предприятия, которые принадлежат к определенной категории, на основе коллекции collection_select, содержащей доступные категории.

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

Вот информация о поиске в моем контроллере бизнеса:

  def search
    if params[:search].present?
      @businesses = Business.search(params[:search])
    else
      @businesses = Business.all.paginate(page: params[:page], per_page: 6)
    end
  end

Моя форма поиска:

<%= form_tag search_businesses_path, method: :get, role: "search", :class => "search" do %>
    <%= label :category, "Search By Business Name" %>
    <%= text_field_tag :search, params[:search], id: "search", :placeholder => 'Search Business' %>
    <%= button_tag(type: 'submit', class: "button") do %>
        <i class="fa fa-arrow-right"></i>
    <% end %>
<% end %>

И мою текущую коллекцию категорий выберите:

<%= form_for :category do |f| %>
    <%= f.label :category, "Search By Category" %><br>
    <%= f.collection_select :category_id, Category.all.order('name ASC'), :id, :name %>
    <%= button_tag(type: 'submit', class: "button") do %>
        <i class="fa fa-arrow-right"></i>
    <% end %>
<% end %>

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

ОБНОВИТЬ

Я пробовал следующий код, и никаких результатов не появляется:

Моя бизнес-модель

def search_data
    {
      name: name,
      category_id: category_id
    }
end

Контроллер моего бизнеса

def search
    if params[:search].present?
      @businesses = Business.search "apples", where: { category_id: params[:category_id] }
    else
      @businesses = Business.all.paginate(page: params[:page], per_page: 6)
    end
  end

Моя форма

<%= form_tag search_businesses_path, method: :get, role: "search", :class => "search" do %>
    <%= label :category, "Search By Category" %>
    <%= collection_select :search, params[:category_id], Category.all.order('name ASC'), :id, :name %>
    <%= button_tag(type: 'submit', class: "button") do %>
        <i class="fa fa-arrow-right"></i>
    <% end %>
<% end %>

1 ответ

Будет ли это работать для вас:

в Business Модель определения этого метода:

def search_data
  {
    name: name,
    category_id: category_id
  }
end

Или я думаю, что вы можете написать это тоже (не уверен): category: category.name

Так что это будет индексировать category тоже, и вы можете искать, используя это тогда в вашем контроллере, как это:

Business.search "apples", where: { category_id: params[:category_id] }

или если category.name работает тогда { category: params[:category] }

Изменить params в соответствии с вашими form,

Другие вопросы по тегам