Как я могу искать принадлежащее_все с использованием гема 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
,