2016-03-20 44 views
2

我的應用程序中有兩個主要模型,「商業」和「類別」。我目前有一個搜索text_field,工作得很好,但我也試圖實現用戶根據包含可用類別的collection_select搜索「belongs_to」某個類別的企業的功能。如何使用collection_select搜索使用searchkick gem的belongs_to?

我有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 %> 

我知道我需要告訴收集選擇它需要顯示的業務,但我似乎無法弄清楚如何支持妥善執行它。

UPDATE

我嘗試下面的代碼,並沒有結果顯示:

我的商業模式

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 %> 
+0

你檢查過「params」嗎? 'params [:category_id]'存在嗎?或者它進入'params [:search]'?只需檢查併發布你收到的'params'。 – Deep

+0

所以你說改變參數爲 '<%= collection_select:search,params [:search],Category.all.order('name ASC'),:id,:name%>' 這不顯示任何結果無論是。 – ZMoodie

+0

玩過之後,我大多能夠做出正確的業務,但其中一些類別在頂部顯示了正確的業務,然後列出了其他幾個業務。我能做到這一點的唯一方法就是保持「商業」。搜索(params [:搜索])'的方式,並像這樣顯示我的表單'<%= collection_select:search,params [:category_id],Category.all.order('name ASC'),:id,:name %>'否則什麼都不會顯示出來。 – ZMoodie

回答

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

+0

我已經以幾種不同的方式嘗試過你的建議,但要麼沒有結果出現,或幾個看似隨機的出現。 – ZMoodie

+0

你可以發佈你試過的代碼嗎? – Deep

+0

我已經更新了我的代碼。 – ZMoodie

相關問題