2012-04-22 135 views
5

设置:键必须是字符串或符号

Ruby on rails 3.2.2 
Ruby 1.9.2 
dataMapper 1.2.0 
mongoid 2.4.8 
mongoid_orderable 1.0.0 

使用mongoid_orderable时获得keys must be strings or symbols错误。

我认为这是与我使用除了mongid

我已经注意到的DataMapper和mongoid之间的冲突(从DataMapper的anoher服务器移植数据),因为它们都与各种方法扩大的象征符号,DataMapper的,asc,desc等。这可能是同样的问题?

这里是我的堆栈跟踪的一个片段,如果它是任何帮助:

keys must be strings or symbols 
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/bson-1.6.2/lib/bson/bson_c.rb:24:in `serialize' 
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/bson-1.6.2/lib/bson/bson_c.rb:24:in `serialize' 
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/mongo-1.6.2/lib/mongo/collection.rb:436:in `update' 
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/mongoid-2.4.8/lib/mongoid/collections/master.rb:25:in `block in update' 
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/mongoid-2.4.8/lib/mongoid/collections/retry.rb:29:in `retry_on_connection_failure' 
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/mongoid-2.4.8/lib/mongoid/collections/master.rb:24:in `update' 
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/mongoid-2.4.8/lib/mongoid/collection.rb:149:in `update' 
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/mongoid_orderable-1.0.0/lib/mongoid_orderable/mongoid/contexts/mongo.rb:6:in `inc' 
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/mongoid_orderable-1.0.0/lib/mongoid_orderable/mongoid/criteria.rb:1:in `inc' 
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/mongoid_orderable-1.0.0/lib/mongoid/orderable.rb:125:in `apply_position' 
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/mongoid_orderable-1.0.0/lib/mongoid/orderable.rb:85:in `add_to_list' 
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/activesupport-3.2.2/lib/active_support/callbacks.rb:419:in `block in _run__3008157942946527494__save__4591629889417243504__callbacks' 
/Users/hmm/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/activesupport-3.2.2/lib/active_support/callbacks.rb:215:in `block in _conditional_callback_around_742' 

当前实现mongoid_orderable的是以下几点:

class MyModel 
    include Mongoid::Document 
    include Mongoid::Orderable 
    default_scope order_by(:position => :asc) 
end 

我敢肯定它就是_mongoid_orderable_基于与stacktrace和它的工作原理,如果我注释掉_mongoid_orderable_相关的行。还提出了一个问题here

回答

5

解决了它。

它就像我一样,与mongoid和DataMapper碰撞。 在mongoid_orderable更改几行解决了它。

如果有人偶然发现了这个问题,是因为两者的DataMapper和Mongoid与运营商扩展符号像gte, gt, lt, lte

为了避免这种情况collission只使用mongoids替代语法:的

代替:

order_by(:created_at.desc) 

where(:type.ne => 'Class') 

使用此:

order_by(:created_at => :desc) 

where(:type => {'$ne' => 'Class'}) 
相关问题