This is really racking my brain, but maybe I'm trying to hard.
I'm passing a param via a URL (example.com?debug=true)
So I basically want to say:
if params[:debug] == true do xyz else do abc end But for whatever reason that if statement just isn't doing like it seems like it should.
Is there a better way to do that if/else statement based on a param being true or false?
The debug param will either have a value of true, no value, or a value of false (as far as the URL goes).
False == (False or True) In this expression python would first solve the comparison operator in bracket. => (False or True) is said to be True. Because the 'OR' operator search for the first truthy value, and if found it returns the value else 'False'. Now we have: =>False == True is False.
You can check if a value is either truthy or falsy with the built-in bool() function. According to the Python Documentation, this function: Returns a Boolean value, i.e. one of True or False . x (the argument) is converted using the standard truth testing procedure.
params come in as strings, so you need to compare against "true", not true.
You could use ActiveRecord's method of checking truthful values if you don't want to reinvent the wheel (this is what is used when passing params inside an ActiveRecord object
Rails 3-4.1
if ActiveRecord::ConnectionAdapters::Column.value_to_boolean(params[:debug]) do xyz else do abc Rails 4.2.0
ActiveRecord::Type::Boolean.new.type_cast_from_database(params[:debug]) Rails 5
ActiveModel::Type::Boolean.new.cast(params[:debug]) Might be worth wrapping in a helper but never the less it's quite flexible:
rails c Loading development environment (Rails 3.2.6) 1.9.3p194 :001 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean '1' => true 1.9.3p194 :002 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean '0' => false 1.9.3p194 :003 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean 1 => true 1.9.3p194 :004 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean true => true 1.9.3p194 :005 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean 'true' => true 1.9.3p194 :006 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean 'on' => true 1.9.3p194 :007 > ActiveRecord::ConnectionAdapters::Column.value_to_boolean 'off' Custom extension
Some people frown on extending core classes but this does fit with the DRY principle.
# config/initializer/boolean.rb class Boolean def self.parse(value) ActiveRecord::ConnectionAdapters::Column.value_to_boolean(value) end end Then used like
if Boolean.parse(params[:debug]) then xyz
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With