3

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

我的表格接受小数(例如 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

4

1 回答 1

3

duration_before_type_cast当您想要访问原始字符串时使用该属性。

文档:http ://api.rubyonrails.org/classes/ActiveRecord/Base.html#label-Accessing+attributes+before+they+have+been+typecasted

于 2012-12-28T01:27:12.507 回答