0

我正在尝试保留具有时间类型字段的对象。在创建时,我尝试将其设置sleep_value为有效的时间对象,但保存似乎静默失败(即使raise_on_save_failure设置为 true)。

Sleep.all如果我尝试通过or搜索对象Sleep.get(1),我会收到错误消息argument out of range

我可以传递它以使其持久的唯一值是Time.now(). 如果我执行 a Sleep.allsleep_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
4

1 回答 1

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

该死的,这是一个丑陋的解决方案。当然有更简单的方法吗?

于 2015-07-09T08:57:59.443 回答