2012-08-05 74 views
0
Rails 3.2.2, Ruby 1.9.2 

我正在使用MySql,並且存在TINYINT類型的「MyColumn」列。我需要在頁面上顯示它的狀態。所以我創建了一個輔助方法。ActiveRecord - 檢查值是否爲null,0或1

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 

底線是它也可以是空的或零。所以它不起作用,因爲我需要。它不斷返回false 0true 1,但從不返回blank or nil,即使它應該這樣做。 我做錯了什麼?

回答

4

一個case使用===進行比較,這樣的等價於:

if false === a 
    'false 0' 
elsif true === a 
    'true 1' 
elsif blank? === a 
    'blank or nil' 
else 
    nil 
end 

Rails添加一個blank?方法,對象是looks like this

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

,所以你可以調用blank?任何地方,即使沒有指定接收器:總是會有一個self,它將永遠是一個對象。現在您應該看到when blank?雖然在語法上有效,但完全沒有意義:它不會調用a.blank?並查看是否有真值返回,它僅檢查self.blank? === a是否適合self

你可能會更好過使用一個明確的if/else此:

def result(a) 
    # false.blank? is true so you don't want a.blank? here. 
    if(a.nil?) 
    'nil' 
    elsif(a) 
    'true 1' 
    else 
    'false 0' 
    end 
end