Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

eq_any for boolean attributes - ransack

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.

like image 549
Renan Avatar asked Jul 05 '13 13:07

Renan


3 Answers

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

like image 148
Fred Bergman Avatar answered Oct 11 '22 21:10

Fred Bergman


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' %>
like image 41
spaghetticode Avatar answered Oct 11 '22 20:10

spaghetticode


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

like image 45
QMFNP Avatar answered Oct 11 '22 22:10

QMFNP