data_mapper: не удается сохранить объект Time

Я пытаюсь сохранить объект, имеющий поле типа времени. При создании я пытаюсь установить sleep_value к действительному объекту Time, но кажется, что сохранение завершается с ошибкой (даже если raise_on_save_failure установлено в true).

Если я попытаюсь найти объект через Sleep.all или же Sleep.get(1)я получаю ошибку argument out of range,

Единственное значение, которое я могу передать, чтобы оно сохранялось, это Time.now(), Если я сделаю Sleep.allэтот объект с sleep_time => Time.now возвращается

gems:    
data_mapper (1.2.0)   
sqlite3 (1.3.10)


require 'sqlite3'
require 'data_mapper'

DataMapper::setup(:default, "sqlite3://#{Dir.pwd}/test.db")

DataMapper::Model.raise_on_save_failure = true

class Sleep

    include DataMapper::Resource
    property :id,           Serial
    property :sleep_time,   Time

end

DataMapper.finalize.auto_migrate!

Sleep.create(:sleep_time => Time.new(2015, 10, 1))

Sleep.all

ОБНОВЛЕНИЕ: Я сделал немного больше проб и ошибок и обнаружил, что следующие значения совместимы с полем времени (изменил имя с sleep_time на st)

Sleep.create(:st => (Time.now - 1))
Sleep.create(:st => Time.at((Time.now - Time.at(1000))))

И следующие значения не сохраняются (ошибка не выдается, но записи не сохраняются)

Sleep.create(:st => Time.new(2015, 10, 1, 2, 2, 2, "+02:00"))
Sleep.create(:st => Time.new(2002))
Sleep.create(:st => Time.new((Time.now - Time.new(2002)))) #out of range
Sleep.create(:st => Time.at(2)) #out of range

1 ответ

Решение

Я использовал тот факт, что я мог использовать с Time.now() и сделал этот вспомогательный метод. Я называю это, чтобы сохранить мои свойства времени.

def self.convert_to_dm_friendly_time (target_time)

today = Time.now
return today + target_time.to_i - today.to_i #basically starting the object from today and then taking today out.

end

Черт, это было ужасное решение. Конечно, есть более простой способ?

Другие вопросы по тегам