我的持续时间字段是我数据库中的十进制数据类型。
我的表格接受小数(例如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
Ruby 1.9.3; Rails 3.2.8
答案 0 :(得分:2)
如果要访问原始字符串,请使用duration_before_type_cast
属性。