Skip to content

Instantly share code, notes, and snippets.

@equivalent
Last active December 16, 2021 16:34
Show Gist options
  • Save equivalent/3825916 to your computer and use it in GitHub Desktop.
Save equivalent/3825916 to your computer and use it in GitHub Desktop.
String "false" to_bool ... or how to convert Rails/SimpleForm radio buttons to boolean

This gist was writen in 2012 and it was solving specific problem in Rails & SimpleForm. Some fellow developers were pointing out this may be out dated concept. That's why I advise everyone to read comment section bellow to have a full grasp of alternative solutions

other sources that may be helpful to understand why this may not be best idea:

module StringToBoolean
def to_bool
return true if self == true || self =~ (/^(true|t|yes|y|1)$/i)
return false if self == false || self.blank? || self =~ (/^(false|f|no|n|0)$/i)
raise ArgumentError.new("invalid value for Boolean: \"#{self}\"")
end
end
class String; include StringToBoolean; end
module BooleanToBoolean
def to_bool;return self; end
end
class TrueClass; include BooleanToBoolean; end
class FalseClass; include BooleanToBoolean; end
# However there is also better practice to do it by using
ActiveRecord::ConnectionAdapters::Column.value_to_boolean( something )
2.0.0dev :019 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean('1')
=> true
2.0.0dev :020 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean('0')
=> false
2.0.0dev :021 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean('true')
=> true
2.0.0dev :022 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean('false')
=> false
2.0.0dev :023 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean('nil')
=> false
2.0.0dev :024 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean('t')
=> true
2.0.0dev :025 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean('cat')
=> false
2.0.0dev :026 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean(true)
=> true
2.0.0dev :027 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean(false)
2.0.0dev :035 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean(1)
=> true
2.0.0dev :036 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean(2)
=> false
2.0.0dev :037 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean(0)
=> false
@OpakAlex
Copy link

@equivalent if it's not about ruby, then replace:

class TrueClass; include BooleanToBoolean; end
class FalseClass; include BooleanToBoolean; end

and ask people to use your class without patch ruby. I think if it's not about ruby then use helper method or class, or what you want. If you show how to patch standart ruby class, then make ruby PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment