Ruby on rails ActiveRecord-检查值是否为null、0或1

Ruby on rails ActiveRecord-检查值是否为null、0或1,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我使用的是MySql,有TINYINT类型的“MyColumn”列。我需要在页面上显示它的状态。所以我创建了一个helper方法 Rails 3.2.2, Ruby 1.9.2 底线是它也可以为空或为零。所以它不能像我需要的那样工作。它不断返回false 0或true 1,但决不返回空白或nil,即使它应该这样做。 我做错了什么?Acase使用==进行比较,这相当于: module MyControllerHelper def result(a) case a when

我使用的是MySql,有TINYINT类型的“MyColumn”列。我需要在页面上显示它的状态。所以我创建了一个helper方法

Rails 3.2.2, Ruby 1.9.2
底线是它也可以为空或为零。所以它不能像我需要的那样工作。它不断返回
false 0
true 1
,但决不返回
空白或nil
,即使它应该这样做。
我做错了什么?

A
case
使用
==
进行比较,这相当于:

module MyControllerHelper
 def result(a)
    case a
      when false then 'false 0'
      when true then 'true 1'
      when blank? then 'blank or nil'
    end     
  end
end
Rails向对象添加一个
blank?
方法:

因此,您可以在任何地方调用
blank?
,即使没有指定的接收者:始终会有一个
self
,它始终是一个对象。现在您应该看到
when blank?
,虽然在语法上是有效的,但毫无意义:它不调用
a.blank?
,如果返回真值,它只检查
self.blank?==一个
,不管自己是什么

为此,您最好使用显式的
if/else

def blank?
  respond_to?(:empty?) ? empty? : !self
end

案例
使用
==
进行比较,因此相当于:

module MyControllerHelper
 def result(a)
    case a
      when false then 'false 0'
      when true then 'true 1'
      when blank? then 'blank or nil'
    end     
  end
end
Rails向对象添加一个
blank?
方法:

因此,您可以在任何地方调用
blank?
,即使没有指定的接收者:始终会有一个
self
,它始终是一个对象。现在您应该看到
when blank?
,虽然在语法上是有效的,但毫无意义:它不调用
a.blank?
,如果返回真值,它只检查
self.blank?==一个
,不管自己是什么

为此,您最好使用显式的
if/else

def blank?
  respond_to?(:empty?) ? empty? : !self
end