我有一個持續時間字段,它是我的數據庫中的十進制數據類型。在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
你,我的朋友,是一個天才。那很完美。謝謝! –