データベースに10進数のデータ型である期間フィールドがあります。
私のフォームは小数(たとえば1.5時間)を受け入れますが、 HH:MM(たとえば1時間30分の1:30 )も受け入れられるようにしたいと思います。
before_save
モデルで正規表現がオンになっているHH:MMを検出し、それを10進数に変換して、ユーザーが10進数またはHH:MMのいずれかを入力できるようにしたいと思います。この部分は問題なく良好ですが、私が抱えている問題は、フィールドの値に対して正規表現をテストすることです。
1:30はデータ型として解釈され--- !ruby/class 'BigDecimal'
、正規表現に対してテストできません。
それを行う.to_s
と1.0に変換されます
10進数で入力したフィールドをリラックスさせ、モデルで正規表現テスト用にその値を文字列に変換するにはどうすればよいですか?
これが私のコードです:
# --- 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