我的模型中有一个布尔属性(已发布),book
我希望使用该值上的复选框过滤所有书籍。
class Book < ActiveRecord::Base
attr_accessible :published
end
这意味着我想要类似eq_any
but for true
or的东西false
。有没有办法使用 Ransack 做到这一点?
更新
我希望用户能够只选择已出版的书籍、未出版的书籍和任何书籍。所以单个复选框是行不通的。
我的模型中有一个布尔属性(已发布),book
我希望使用该值上的复选框过滤所有书籍。
class Book < ActiveRecord::Base
attr_accessible :published
end
这意味着我想要类似eq_any
but for true
or的东西false
。有没有办法使用 Ransack 做到这一点?
更新
我希望用户能够只选择已出版的书籍、未出版的书籍和任何书籍。所以单个复选框是行不通的。
我通过使用具有三个选项的选择列表解决了这个问题:“全部”、“是”和“否”
= 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]=
空白 - 将返回已出版和未出版的书籍
选择的答案效果很好,但是,至少在 2016 年,可以写出更好的东西。利用“eq”功能可以删除一些配置。最终结果是:
<%= f.select :published_eq, [['Yes', true], ['No', false]], include_blank: 'All' %>
Renan,您可以使用 'true' 和 'false' 谓词来做到这一点(其他谓词在下面的文档链接中列出)。
在您的表单中,您的复选框代码将如下所示:
<%= f.checkbox :published_true %>
<%= f.checkbox :published_false %>
因此,在您的表单中,选中第一个复选框 (published_true) 将返回所有已发布为 true 的书籍,选中第二个框 (published_false) 将返回所有已发布为 false(未发布)的书籍,并在不选中任一框的情况下提交表单归还所有书籍。
可以在此处的文档中找到更多信息:https ://github.com/ernie/ransack/wiki/Basic-Searching