我正在使用Ransack在一个名为Car的模型上创建一个搜索表单。我在Car上有几个布尔属性,并且在我的搜索表单中为每个属性都包含了复选框,例如:
<%= f.check_box :car_spec_anti_lock_brakes_true %>
<%= f.label :car_spec_anti_lock_brakes_true, "ABS" %>选中此复选框时,搜索结果将包括car_spec_anti_lock_brakes为true的所有记录。如果不对其进行检查,则结果只返回car_spec_anti_lock_brakes为false的记录。如何实现搜索表单,以便在未选中复选框时返回car_spec_anti_lock_brakes为true或false的所有记录。因此,当选中复选框时,返回具有该属性的所有记录,但当未选中时,则返回所有记录,这与属性是真还是假无关。
发布于 2015-01-12 16:57:33
我通过编辑传递给params方法的Car.search哈希来解决这个问题。如果复选框未选中,则从哈希中删除参数。因此,如果我有以下复选框:
<%= 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键。如果未选中复选框,则相应的键在传递到搜索时,将在0哈希中包含一个params[:q]值。解决方案是在将0值传递到搜索之前从params[:q]哈希中移除具有params[:q]值的键:
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发布于 2015-01-19 05:31:52
我通过编辑视图文件来解决问题。
您的代码生成隐藏表单,该表单提供假param。
<%= 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为true或false的所有记录。
https://stackoverflow.com/questions/27890997
复制相似问题