2012-04-22 37 views
5

Setup:phím phải xâu hoặc biểu tượng

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

Bắt keys must be strings or symbols lỗi khi sử dụng mongoid_orderable.

Tôi nghĩ rằng nó có cái gì để làm với Datamapper mà tôi đang sử dụng bên cạnh mongid (porting dữ liệu từ máy chủ anoher với DataMapper)

Tôi đã thông báo va chạm giữa DataMapper và mongoid, vì cả hai đều kéo dài Symbol với các phương pháp khác nhau , asc, desc vv Đây có phải là vấn đề tương tự không?

Dưới đây là một đoạn trích từ stacktrace của tôi nếu nó là bất kỳ sự giúp đỡ:

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' 

thực hiện hiện tại của mongoid_orderable là sau đây:

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

Tôi khá chắc chắn rằng nó có liên quan đến _mongoid_orderable_ dựa trên stacktrace và thực tế là nó hoạt động nếu tôi nhận xét ra _mongoid_orderable_ dòng liên quan. Đồng thời đã gửi một vấn đề here

Trả lời

5

Giải quyết vấn đề.

Giống như tôi, một vụ va chạm với mongoid và DataMapper. Thay đổi một vài dòng trong số mongoid_orderable đã giải quyết được.

Nếu ai vấp ngã khi vấn đề này đó là vì cả hai DataMapper và Mongoid được mở rộng Symbol với những hoạt động như gte, gt, lt, lte, vv

Để tránh va đập này chỉ cần sử dụng cú pháp mongoids thay thế:

thay vì:

order_by(:created_at.desc) 

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

Sử dụng này:

order_by(:created_at => :desc) 

where(:type => {'$ne' => 'Class'}) 
Các vấn đề liên quan