如何检查参数是真还是假?

这真的是我的大脑,但也许我正在努力。

我通过URL传递一个参数(example.com?debug=true)

所以我基本上想说:

if params[:debug] == true do xyz else do abc end 

但无论出于什么原因,如果声明只是不像它应该做的那样。

如果基于param的/ else语句是true还是false,有没有更好的方法呢?

调试参数的值为true,没有值,或者值为false(就URL而言)。

params以字符串forms出现,因此您需要与"true"进行比较,而不是true

如果你不想重新发明轮子,可以使用ActiveRecord检查真值的方法(这是在ActiveRecord对象中传递params时使用的方法)

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]) 

可能值得帮助包装,但从来没有那么灵活:

 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' 

自定义扩展

有些人不屑于扩展核心类,但这确实符合DRY原则。

 # config/initializer/boolean.rb class Boolean def self.parse(value) ActiveRecord::ConnectionAdapters::Column.value_to_boolean(value) end end 

然后使用像

 if Boolean.parse(params[:debug]) then xyz 

从Rails / ActiveRecord 4.2.0开始

 if ActiveRecord::Type::Boolean.new.type_cast_from_user params[:debug] do xyz else do abc end 

在Rails 5中它是:

 if ActiveModel::Type::Boolean.new.cast params[:debug] do xyz else do abc end 

但无论出于什么原因,如果声明只是不像它应该做的那样。

我几乎可以保证它正在做它应该做的事情。 当事情没有意义时,我们的一个假设是错误的。

值实际上是布尔值还是字符串(或其他东西?)。 如果值是一个字符串,那么当然与布尔值true的比较将失败。 尝试比较’true’,看看是否有效。