6

我的模型中有一个布尔属性(已发布),book我希望使用该值上的复选框过滤所有书籍。

class Book < ActiveRecord::Base
  attr_accessible :published
end

这意味着我想要类似eq_anybut for trueor的东西false。有没有办法使用 Ransack 做到这一点?

更新

我希望用户能够只选择已出版的书籍、未出版的书籍和任何书籍。所以单个复选框是行不通的。

4

3 回答 3

4

我通过使用具有三个选项的选择列表解决了这个问题:“全部”、“是”和“否”

= select :q, :published_true, [['Yes', 1], ['No', 0]], { include_blank: 'All', selected: params[:q] ? params[:q][:published_true] : '' }

published_true 的查询字符串如下所示:

q[published_true]=11 将返回已出版的书籍

q[published_true]=00 将返回未出版的书籍

q[published_true]=空白 - 将返回已出版和未出版的书籍

于 2014-11-26T18:40:25.477 回答
3

选择的答案效果很好,但是,至少在 2016 年,可以写出更好的东西。利用“eq”功能可以删除一些配置。最终结果是:

<%= f.select :published_eq, [['Yes', true], ['No', false]], include_blank: 'All' %>
于 2016-11-14T09:24:18.230 回答
2

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

于 2013-08-12T16:54:12.977 回答