2012-04-22 20 views
5

Configuración:claves deben ser cadenas o símbolos

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

Obtención keys must be strings or symbols error al utilizar mongoid_orderable.

Creo que tiene algo que ver con DataMapper el que estoy usando, además mongid (portar datos de servidor con anoher DataMapper)

tengo cuenta de colisiones entre DataMapper y MongoId, ya que ambos se extienden Símbolo con varios métodos , asc, desc, etc. ¿Podría ser el mismo problema?

Aquí hay un fragmento de mi StackTrace si se trata de ningún tipo de ayuda:

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' 

aplicación actual de mongoid_orderable es el siguiente:

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

estoy bastante seguro de que está relacionado con _mongoid_orderable_ basado en stacktrace y el hecho de que funciona si hago un comentario de las líneas relacionadas _mongoid_orderable_. También archivó un problema here

Respuesta

5

Lo resolvió.

Fue, como creo, una colisión con mongoid y DataMapper. Cambiando algunas líneas en mongoid_orderable lo resolvió.

Si alguien se tropiezan con este problema es debido a que tanto DataMapper y Mongoid está extendiendo Símbolo con operadores como gte, gt, lt, lte etc.

Para evitar esto collission sólo tiene que utilizar la sintaxis alternativa mongoids:

en lugar de:

order_by(:created_at.desc) 

y

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

:

order_by(:created_at => :desc) 

y

where(:type => {'$ne' => 'Class'}) 
Cuestiones relacionadas