2012-04-22 14 views
5

Setup:chiavi devono essere stringhe o simboli

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

Come keys must be strings or symbols errore quando si utilizza mongoid_orderable.

Penso che abbia qualcosa a che fare con DataMapper che sto usando oltre mongid (porting dati dal server con anoher DataMapper)

ho accorge collisioni tra DataMapper e mongoid, dal momento che entrambi si estendono simbolo con vari metodi , asc, desc ecc. Potrebbe essere lo stesso problema?

Ecco un frammento del mio stacktrace se si tratta di alcun aiuto:

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' 

implementazione attuale di mongoid_orderable è la seguente:

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

Sono abbastanza sicuro che è legato alla _mongoid_orderable_ sulla base di stacktrace e il fatto che funzioni se commento le righe relative a _mongoid_orderable_. Inoltre ha presentato un problema here

risposta

5

Risolto.

Era, come se fossi, una collisione con mongoid e DataMapper. Modifica di alcune righe in mongoid_orderable risolto.

Se qualcuno inciampare su questo problema è perché sia ​​DataMapper e Mongoid sta estendendo simbolo con operatori come gte, gt, lt, lte ecc

Per evitare questo collission basta usare la sintassi mongoids alternativa:

invece di:

order_by(:created_at.desc) 

e

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

Utilizzare questa:

order_by(:created_at => :desc) 

e

where(:type => {'$ne' => 'Class'}) 
Problemi correlati