2012-12-28 21 views
3

我有一個持續時間字段,它是我的數據庫中的十進制數據類型。在Ruby on Rails中將HH:MM時間轉換爲十進制數before_save

我的形式接受小數(例如1.5小時),但我也希望能夠接受HH:MM(例如1:30 1小時30分鐘)。

我希望能夠在我的模型中使用正則表達式在before_save上檢測HH:MM,並將其轉換爲十進制,以便用戶可以輸入小數或HH:MM。這部分是好的,但我遇到的問題是測試正則表達式與該字段中的值。

1:30被解釋爲數據類型--- !ruby/class 'BigDecimal',我無法用正則表達式對其進行測試。

.to_s就可以將其轉換爲1.0

如何讓我的十進制類型的場放鬆,讓我它的值轉換爲在我的模型正則表達式測試字符串?

這裏是我的代碼:

# --- Model --- 
before_save :convert_duration 

def convert_duration 
    if duration =~ /^([0-9]|0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/ 
    time_pieces = duration.split(":") 
    hours = time_pieces[0].to_i 
    minutes = (time_pieces[1].to_f/60.0) 

    # Final value ready for database 
    self.duration = (hours+minutes).round(1) 
    end 
end 

的Ruby 1.9.3; Rails 3.2.8

回答

相關問題