【发布时间】:2014-06-07 16:45:41
【问题描述】:
我有一个非常简单的表,几乎是一个键/值存储,类似于
class Device
include DataMapper::Resource
property :token, Text, :key => true
end
当然我在定义它之后会调用DataMapper.finalize,因为我使用的是 Sinatra。
当我创建一个新设备时,像这样
Device.create(:token => "Foo Bar")
我得到了所有这些巨大的垃圾场
~ (0.000063) SET sql_auto_is_null = 0
~ no implicit conversion from nil to integer
TypeError: no implicit conversion from nil to integer
from /Library/Ruby/Gems/2.0.0/gems/data_objects-0.10.14/lib/data_objects/quoting.rb:12:in `quote_string'
from /Library/Ruby/Gems/2.0.0/gems/data_objects-0.10.14/lib/data_objects/quoting.rb:12:in `quote_value'
from /Library/Ruby/Gems/2.0.0/gems/data_objects-0.10.14/lib/data_objects/command.rb:69:in `block in escape_sql'
from /Library/Ruby/Gems/2.0.0/gems/data_objects-0.10.14/lib/data_objects/command.rb:62:in `gsub!'
from /Library/Ruby/Gems/2.0.0/gems/data_objects-0.10.14/lib/data_objects/command.rb:62:in `escape_sql'
from /Library/Ruby/Gems/2.0.0/gems/dm-do-adapter-1.2.0/lib/dm-do-adapter/adapter.rb:114:in `execute_non_query'
from /Library/Ruby/Gems/2.0.0/gems/dm-do-adapter-1.2.0/lib/dm-do-adapter/adapter.rb:114:in `block (2 levels) in create'
from /Library/Ruby/Gems/2.0.0/gems/dm-do-adapter-1.2.0/lib/dm-do-adapter/adapter.rb:276:in `with_connection'
from /Library/Ruby/Gems/2.0.0/gems/dm-do-adapter-1.2.0/lib/dm-do-adapter/adapter.rb:113:in `block in create'
from /Library/Ruby/Gems/2.0.0/gems/dm-do-adapter-1.2.0/lib/dm-do-adapter/adapter.rb:85:in `each'
from /Library/Ruby/Gems/2.0.0/gems/dm-do-adapter-1.2.0/lib/dm-do-adapter/adapter.rb:85:in `create'
from /Library/Ruby/Gems/2.0.0/gems/dm-core-1.2.1/lib/dm-core/repository.rb:146:in `create'
from /Library/Ruby/Gems/2.0.0/gems/dm-core-1.2.1/lib/dm-core/resource/persistence_state/transient.rb:74:in `create_resource'
from /Library/Ruby/Gems/2.0.0/gems/dm-core-1.2.1/lib/dm-core/resource/persistence_state/transient.rb:25:in `commit'
from /Library/Ruby/Gems/2.0.0/gems/dm-core-1.2.1/lib/dm-core/resource.rb:963:in `_persist'
from /Library/Ruby/Gems/2.0.0/gems/dm-core-1.2.1/lib/dm-core/resource.rb:977:in `block in create_with_hooks'
from /Library/Ruby/Gems/2.0.0/gems/dm-core-1.2.1/lib/dm-core/resource.rb:974:in `catch'
from /Library/Ruby/Gems/2.0.0/gems/dm-core-1.2.1/lib/dm-core/resource.rb:974:in `create_with_hooks'
from /Library/Ruby/Gems/2.0.0/gems/dm-core-1.2.1/lib/dm-core/resource.rb:1028:in `save_self'
from /Library/Ruby/Gems/2.0.0/gems/dm-validations-1.2.0/lib/dm-validations.rb:54:in `save_self'
from /Library/Ruby/Gems/2.0.0/gems/dm-core-1.2.1/lib/dm-core/resource.rb:1013:in `block in _save'
from /Library/Ruby/Gems/2.0.0/gems/dm-core-1.2.1/lib/dm-core/resource.rb:1229:in `run_once'
from /Library/Ruby/Gems/2.0.0/gems/dm-core-1.2.1/lib/dm-core/resource.rb:1012:in `_save'
from /Library/Ruby/Gems/2.0.0/gems/dm-core-1.2.1/lib/dm-core/resource.rb:412:in `save'
from /Library/Ruby/Gems/2.0.0/gems/dm-validations-1.2.0/lib/dm-validations.rb:40:in `block in save'
from /Library/Ruby/Gems/2.0.0/gems/dm-validations-1.2.0/lib/dm-validations/context.rb:16:in `in_context'
from /Library/Ruby/Gems/2.0.0/gems/dm-validations-1.2.0/lib/dm-validations.rb:40:in `save'
from /Library/Ruby/Gems/2.0.0/gems/dm-validations-1.2.0/lib/dm-validations.rb:130:in `create'
from (irb):19
from /usr/bin/irb:12
当我在 Sinatra 中运行完全相同的代码时,当然会发生非常相似的事情。我正在运行 Ruby 2.0,以防万一不清楚。
有什么线索吗?
编辑:由于时间限制,我后来搬到了 Rails,但我喜欢 Sinatra,我仍然希望完成这项工作,所以如果有人有想法,我仍然非常欢迎他们.
【问题讨论】:
-
你跑
DataMapper.auto_migrate!了吗?如果不运行,请告诉我。 -
我的数据存储中已经有一个模式,没有必要运行它,但只是为了好玩我运行它(在完成后,因为你甚至应该在 Sinatra 中运行它应用程序?),我得到了几乎完全相同的转储(除了几个行号等)。
-
很奇怪。它非常适合我的 DataMapper+Sqlite+Ruby 2.0 设置。
Device.all #=> [#<Device @token="Foo Bar">] -
@kiddorails,事实上我可以毫无问题地获取所有
Devices,但我似乎无法让它创建新的。 -
@Morpheu5 上面的列表(在我的输出中)是由
Device.create(:token => "Foo Bar")自己创建的。
标签: ruby sinatra datamapper