eq_any用于布尔属性 - ransack

时间:2013-07-05 13:49:29

标签: ruby-on-rails-3 ransack

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

class Book < ActiveRecord::Base
  attr_accessible :published
end

这意味着我喜欢eq_anytruefalse。有没有办法用Ransack做到这一点?

更新

我希望用户只能选择已出版的书籍,只能选择未出版的书籍和任何书籍。因此,单个复选框不会。

3 个答案:

答案 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' %>