data_mapper:无法保存时间对象

时间:2015-05-09 06:19:03

标签: ruby sqlite datamapper sqlite3-ruby ruby-2.1.5

我试图保留一个具有Time-type字段的对象。在创建时,我尝试将sleep_value设置为有效的Time对象,但保存似乎无声地失败(即使raise_on_save_failure设置为true)。

如果我尝试通过Sleep.allSleep.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 个答案:

答案 0 :(得分:0)

我使用的事实是我可以使用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
该死的,这是一个丑陋的解决方案。当然有一种更简单的方法吗?