Reputation: 1051
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
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
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
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
Ruby API: http://ruby-doc.org/core/classes/Fixnum.html#M001050
Upvotes: 62
Reputation: 237060
1 is your only truth value here. So you can get the boolean truth value with number == 1
.
Upvotes: 13