eq_any for boolean attributes - ransack

半腔热情 提交于 2019-12-22 05:39:33

问题


I have a boolean attribute (published) in my model book and I wish to filter all books using checkboxes on that value.

class Book < ActiveRecord::Base
  attr_accessible :published
end

That means I'd like something like eq_any but for true or false. Is there a way to do this using Ransack?

UPDATE

I'd like users to be able to select only published books, only unpublished books and any book. So a single checkbox won't do.


回答1:


I have solved this by using a select list with three options: "All", "Yes" and "No"

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

The query string for published_true will look like this:

q[published_true]=1 1 will return published books

q[published_true]=0 0 will return unpublished books

q[published_true]= blank – will return both published and unpublished books




回答2:


Renan, you can do this using the 'true' and 'false' predicates (other predicates are listed in the documentation link below).

In your form, your checkbox code would look something like this:

<%= f.checkbox :published_true %>
<%= f.checkbox :published_false %>

So, in your form, checking the first checkbox (published_true) would return all books where published is true, checking the second box (published_false) would return all books where published is false (unplublished), and submitting the form without checking either box would return all books.

More information can be found in the documentation here: https://github.com/ernie/ransack/wiki/Basic-Searching




回答3:


The choosen answer works fine, but, at least in 2016, something better can be written. Leveraging on the "eq" functionality allows to remove some configuration. The final result is:

<%= f.select :published_eq, [['Yes', true], ['No', false]], include_blank: 'All' %>


来源:https://stackoverflow.com/questions/17490458/eq-any-for-boolean-attributes-ransack

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!