2010-08-09 26 views
0

我在一个轨道形式的持续时间的互动,目前它是一个文本框和格式要求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 

但它最终发送一个验证错误,因为时间属性是它之后得到由时间设定=方法的整数。

如何在数据库中存储持续时间值,但仍然以不同的格式(MM:SS)执行验证?

回答

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