2015-01-11 18 views
1

我正在使用Ransack在名爲Car的模型上創建搜索表單。我有幾個Car布爾屬性,我已經爲他們每個人我的搜索形式包括複選框,例如:使用布爾屬性Ransack返回記錄true和false複選框

<%= f.check_box :car_spec_anti_lock_brakes_true %> 
<%= f.label :car_spec_anti_lock_brakes_true, "ABS" %> 

當此複選框被選中,搜索結果包括所有記錄car_spec_anti_lock_brakestrue。如果未選中,結果僅返回car_spec_anti_lock_brakesfalse的記錄。我如何實現搜索表單,以便當複選框未被選中時,返回car_spec_anti_lock_brakes爲真或假的所有記錄。因此,當複選框被選中時,返回所有具有該屬性的記錄,但是當它未被選中時,將返回所有記錄,而不管屬性是true還是false。

回答

0

我通過編輯傳遞給Car.search方法的params散列來解決這個問題。如果複選框未被選中,我將從哈希中移除參數。所以,如果我有以下複選框:

<%= f.check_box :car_spec_anti_lock_brakes_true %> 
<%= f.label :car_spec_anti_lock_brakes_true, "ABS" %> 

<%= f.check_box :car_spec_traction_control_true %> 
<%= f.label :car_spec_traction_control_true, "Traction control" %> 

<%= f.check_box :car_spec_rims_true %> 
<%= f.label :car_spec_rims_true, "Rims" %> 

params[:q]哈希將有鑰匙:car_spec_anti_lock_brakes_true:car_spec_traction_control_true:car_spec_rims_true。當一個複選框未被選中時,相應的密鑰在傳遞到搜索中時,其params[:q]哈希中的值將爲0。解決的辦法是刪除具有從params[:q]哈希值0它們傳遞之前到搜索鍵:

if params[:q] 
    @params = params[:q] 
    @params.delete(:car_spec_anti_lock_brakes_true) if @params[:car_spec_anti_lock_brakes_true] = '0' 
    @params.delete(:car_spec_traction_control_true) if @params[:car_spec_traction_control_true] = '0' 
    @params.delete(:car_spec_anti_rims_true) if @params[:car_spec_rims_true] = '0' 
else 
    @params = [] 
end 

@search = Car.search(@params) 
@cars = @search.result 
5

我通過編輯視圖文件來解決。

您的代碼會生成提供false參數的隱藏窗體。

<%= f.check_box :car_spec_anti_lock_brakes_true %> 

#generated html code 
<input type="hidden" value="0" name="q[car_spec_anti_lock_brakes_true]"></input> 
<input id="q_car_spec_anti_lock_brakes_true" type="checkbox" value="1" name="q[car_spec_anti_lock_brakes_true]"></input> 

因此,我刪除了隱藏表格。

<%= f.check_box :car_spec_anti_lock_brakes_true, include_hidden: false %> 

#generated html code 
<input id="q_car_spec_anti_lock_brakes_true" name="q[car_spec_anti_lock_brakes_true]" value="1" type="checkbox"></input> 

當複選框任其發展所有記錄car_spec_anti_lock_brakes是真或假返回。

相關問題