Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在Ruby on Rails中保存之前,将HH:MM时间转换为十进制_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails 在Ruby on Rails中保存之前,将HH:MM时间转换为十进制

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 如何使十进制类型的字段松弛,并让我将其值转换

我有一个持续时间字段,它是数据库中的十进制数据类型

我的表单接受小数(例如1.5小时),但我也希望能够接受HH:MM(例如1小时30分钟)

在我的模型中保存之前,我希望能够使用regex在
上检测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
属性


医生:

我的朋友,你是个天才。太好了。非常感谢。