我的模型book
中有一个布尔属性(已发布),我希望使用该值的复选框过滤所有书籍。
class Book < ActiveRecord::Base
attr_accessible :published
end
这意味着我喜欢eq_any
但true
或false
。有没有办法用Ransack做到这一点?
更新
我希望用户只能选择已出版的书籍,只能选择未出版的书籍和任何书籍。因此,单个复选框不会。
答案 0 :(得分:3)
我通过使用带有三个选项的选择列表解决了这个问题:&#34;所有&#34;,&#34;是&#34;和&#34;不&#34;
= select :q, :published_true, [['Yes', 1], ['No', 0]], { include_blank: 'All', selected: params[:q] ? params[:q][:published_true] : '' }
published_true的查询字符串如下所示:
q[published_true]=1
1将返回已出版的图书
q[published_true]=0
0将返回未发表的图书
q[published_true]=
空白 - 将返回已发布和未发布的图书
答案 1 :(得分:2)
Renan,你可以使用&#39; true&#39;并且&#39; false&#39;谓词(其他谓词列在下面的文档链接中)。
在您的表单中,您的复选框代码如下所示:
<%= f.checkbox :published_true %>
<%= f.checkbox :published_false %>
因此,在您的表单中,选中第一个复选框(published_true)将返回已发布的所有书籍为true,检查第二个框(published_false)将返回所有已发布的书籍为false(未发布),并提交表单而不检查任何一个盒子都会归还所有书籍。
更多信息可在此处的文档中找到:https://github.com/ernie/ransack/wiki/Basic-Searching
答案 2 :(得分:1)
选择的答案很好,但是,至少在2016年,可以写出更好的答案。利用“eq”功能可以删除一些配置。最终结果是:
<%= f.select :published_eq, [['Yes', true], ['No', false]], include_blank: 'All' %>