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.
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
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' %>
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With