Как проверить модель рельсов по исходному значению, но сохранить обработанное значение - PullRequest
0 голосов
/ 10 августа 2010

Я взаимодействую с продолжительностью времени в форме рельсов, в настоящее время это текстовое поле, и формат требует 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)

?

1 Ответ

0 голосов
/ 10 августа 2010

Я не знаю, является ли это лучшим решением, но я думаю, что вы могли бы использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...