我通過編輯傳遞給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