你可以使用檢查真實值的ActiveRecord的方法,如果你不想重新發明輪子(這是幹什麼用的傳遞一個ActiveRecord對象
鋼軌內側PARAMS當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
這是問題...不能用來比較的字符串。 – Shpigford 2009-11-10 22:07:47
另一種解決方案是檢查是否存在'if params [:debug] .present?' – SparK 2016-05-31 14:28:23
@Dty對於'nil'和'false'方法'.present?'返回'false'。這與'.blank?'完全相反。 – SparK 2016-07-18 16:49:45