2012-04-22 193 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'}) 
相關問題