Created
January 11, 2012 23:58
-
-
Save avdi/1597569 to your computer and use it in GitHub Desktop.
Setting booleans in AR
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# When params come back from a form, checked boxes come back as 'field_name' => "on". | |
# So we can use that to update attributes, right? | |
model.field_name # => false | |
model.update_attribute(:field_name, "on") | |
model.field_name # => false | |
# WTF? |
As @scottharvey said, "1"
and true
are what I've used in the past, though 1
should also work.
Also, "field_name" => "on"
seems weird to me. Checkboxes usually result in "field_name" => "1"
.
These fields, in the mysql[2] adapter are saved as TINYINTs. So if you were doing a query you would say
select * from models where field_name = 1
So, aside from just true
and false
rails would need to know what other strings to use for truthy/falsey values.
>> "true".true?
=> true
>> "on".true?
=> false
Also,
>> model.update_attribute :boolean, "true"
=> true
>> model.boolean
=> true
So it turns out that the jQuery default value for checked boxes is "on"
.
The list of values ActiveRecord considers "truthy" for setting boolean attributes is: [true, 1, '1', 't', 'T', 'true', 'TRUE']
!@&%.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Confirm what @scottharvey says, "on" won't work. "1", 1, 0, "0", true, "true", false and "false" are the only values that I think Rails supports. There may also be support for 't' and 'f'.