我正在以铁轨形式与持续时间进行交互,目前它是一个文本框,格式需要MM:SS
我有验证器:
validates_format_of :time, :with => /^[0-9]?[0-9]{1}[:][0-9]{2}$/, :allow_nil => true, :allow_blank => true, :message => 'format must be MM:SS'
虽然我想将它作为整数(秒)存储在数据库中,以便更容易对该字段进行报告。
我将访问者覆盖为:
def time=(new_time)
parts = new_time.split(':')
write_attribute(:time, (parts[0].to_i * 60) + parts[1].to_i)
end
def time
Time.at(read_attribute(:time).to_i).gmtime.strftime('%R:%S')
end
但它最终会发送验证错误,因为time属性在time =方法设置之后只是一个整数。
如何在几秒钟内在数据库中存储持续时间值,但仍然以不同的格式(MM:SS)强制执行验证?
答案 0 :(得分:0)
我不知道这是否是最佳解决方案,但我相信您可以使用after_validation
,如下所示:
after_validation :convert_time_to_integer
def convert_time_to_integer
parts = self.split(':')
write_attribute(:time, (parts[0].to_i * 60) + parts[1].to_i)
end