我的数据库中有一个十进制数据类型的持续时间字段。
我的表格接受小数(例如 1.5 小时),但我也希望能够接受HH:MM(例如 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
红宝石 1.9.3;导轨 3.2.8