首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ransack返回带有布尔属性的记录,包括true和false,复选框

Ransack返回带有布尔属性的记录,包括true和false,复选框
EN

Stack Overflow用户
提问于 2015-01-11 19:12:09
回答 2查看 2.8K关注 0票数 4

我正在使用Ransack在一个名为Car的模型上创建一个搜索表单。我在Car上有几个布尔属性,并且在我的搜索表单中为每个属性都包含了复选框,例如:

代码语言:javascript
运行
复制
<%= 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的所有记录。因此,当选中复选框时,返回具有该属性的所有记录,但当未选中时,则返回所有记录,这与属性是真还是假无关。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-12 16:57:33

我通过编辑传递给params方法的Car.search哈希来解决这个问题。如果复选框未选中,则从哈希中删除参数。因此,如果我有以下复选框:

代码语言:javascript
运行
复制
<%= 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]值的键:

代码语言:javascript
运行
复制
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
票数 0
EN

Stack Overflow用户

发布于 2015-01-19 05:31:52

我通过编辑视图文件来解决问题。

您的代码生成隐藏表单,该表单提供假param。

代码语言:javascript
运行
复制
<%= 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>

所以,我删除了隐藏的形式。

代码语言:javascript
运行
复制
<%= 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的所有记录。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27890997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档