Ruby on rails 在Ruby on Rails中保存之前,将HH:MM时间转换为十进制
我有一个持续时间字段,它是数据库中的十进制数据类型 我的表单接受小数(例如1.5小时),但我也希望能够接受HH:MM(例如1小时30分钟) 在我的模型中保存之前,我希望能够使用regex在Ruby on rails 在Ruby on Rails中保存之前,将HH:MM时间转换为十进制,ruby-on-rails,ruby,Ruby On Rails,Ruby,我有一个持续时间字段,它是数据库中的十进制数据类型 我的表单接受小数(例如1.5小时),但我也希望能够接受HH:MM(例如1小时30分钟) 在我的模型中保存之前,我希望能够使用regex在上检测HH:MM,并将其转换为十进制,以便用户可以输入十进制或HH:MM。这部分很好,但我遇到的问题是根据字段中的值测试正则表达式 1:30被解释为数据类型--!ruby/class'BigDecimal'我不能用正则表达式测试它 在其上执行.to_将其转换为1.0 如何使十进制类型的字段松弛,并让我将其值转换
上检测HH:MM,并将其转换为十进制,以便用户可以输入十进制或HH:MM。这部分很好,但我遇到的问题是根据字段中的值测试正则表达式
1:30被解释为数据类型--!ruby/class'BigDecimal'
我不能用正则表达式测试它
在其上执行.to_
将其转换为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当您想要访问原始字符串时,请使用duration\u before\u type\u cast
属性
医生:我的朋友,你是个天才。太好了。非常感谢。