Вставка времени в столбец времени с помощью Ruby on Rails - PullRequest
5 голосов
/ 26 июля 2010

Я столкнулся с проблемой, которая, по моему мнению, является ошибкой Active Records. Я анализирую файл XML, который содержит задания. Этот xml-файл содержит узлы, которые указывают настенное время в формате времени 00:00:00. У меня также есть модель, которая будет принимать эти работы. Однако, когда время превышает фактическое 24-часовое время, активная запись вставляет его как NULL. Примеры ниже:

INSERT INTO `jobs` (`jobid`, `walltime`) VALUES('71413', 'NULL')

INSERT INTO `jobs` (`jobid`, `walltime`) VALUES('71413', '15:24:10')

Есть идеи? Спасибо!

1 Ответ

5 голосов
/ 26 июля 2010

Типы данных standard SQL time и datetime не предназначены для хранения длительности. Вероятно, в соответствии с этими стандартами логика назначения атрибутов времени ActiveRecord использует правила синтаксического анализа собственного класса Ruby Time для отклонения недопустимого времени дня.

Способ хранения длительностей, как вы и предполагали, может быть:

  1. Сохранить длительность в виде целого числа (например, «количество секунд») или
  2. Сохраните два (дату) времени, начало и конец, и используйте арифметику даты на них.
class Thing < ActiveRecord::Base
  ...
  def duration
    return start - end
  end

  def duration=(length)
    start = Time.now
    end = start + length
  end
  ...
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...