data_mapper: 无法保存时间对象
data_mapper: Can't save Time object
我正在尝试保留一个具有时间类型字段的对象。在创建时,我尝试将 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
我利用了我可以与 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
该死,这是一个丑陋的解决方案。当然有更简单的方法吗?
我正在尝试保留一个具有时间类型字段的对象。在创建时,我尝试将 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
我利用了我可以与 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
该死,这是一个丑陋的解决方案。当然有更简单的方法吗?