如何使用collection_select使用searchkick gem搜索belongs_to?

时间:2016-03-20 15:45:26

标签: ruby-on-rails ruby searchkick collection-select

我的应用程序中有两个主要模型," Business"和"类别"。我目前有一个搜索text_field工作正常,但我也试图实现用户搜索“属于”的企业的能力。基于包含可用类别的collection_select的特定类别。

我的collection_select正在运作,但我似乎无法弄清楚如何让它展示那些属于' belongs_to'选择的类别。

以下是我的业务控制器中的搜索信息:

  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 个答案:

答案 0 :(得分:0)

这对你有用吗?

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