rrevi
rrevi

Reputation: 1051

ruby integer to boolean

I have a DB field that is integer type and values are always 0 or 1. How do I grab the equivalent boolean value in ruby? such that when i do the following the check box is set appropriately:

<%= check_box_tag 'resend', @system_config.resend %>

Upvotes: 31

Views: 43976

Answers (4)

gspoosi
gspoosi

Reputation: 365

I had the same problem and dealt with it this way:

def to_boolean(var)
  case var
    when true, 'true', 1, '1'
      return true
    when false, 'false', 0, '0'
      return false
  end
end

This works with forms, databases and people who don't know Ruby. I found it to be useful especially with Rails, since parameters are often passed/interpreted as strings and I don't want to worry about that.

Upvotes: 2

karmakaze
karmakaze

Reputation: 36154

With Rails there's also ActiveModel::Type::Boolean.new.cast(value) which makes 0 false, non-zero true, [] true, {} true. Note that nil -> nil.

Upvotes: 4

Jarrett Meyer
Jarrett Meyer

Reputation: 19573

You could use the zero? method. It returns true if 0. If you need to backwards, you could easily negate it to !@system_config.resend.zero?. Or you could extend the Fixnum class, adding a to_b? method, since everything is open and extensible in dynamic languages.

class Integer
  def to_b?
    !self.zero?
  end
end

alt text

Ruby API: http://ruby-doc.org/core/classes/Fixnum.html#M001050

Upvotes: 62

Chuck
Chuck

Reputation: 237060

1 is your only truth value here. So you can get the boolean truth value with number == 1.

Upvotes: 13

Related Questions