ruby-on-rails – 键必须是字符串或符号
建立:
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时,获取键必须是字符串或符号错误. 我认为这与我使用的dataMapper有关,除了mongid(使用dataMapper从其他服务器移植数据) 我注意到dataMapper和mongoid之间的冲突,因为它们都使用各种方法扩展Symbol,asc,desc等.这可能是同样的问题吗? 如果有任何帮助,这是我的stacktrace的片段: 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 我很确定它与基于stacktrace的_mongoid_orderable_有关,并且如果我注释掉_mongoid_orderable_相关的行,它就可以工作.还提交了一个问题here 解决方法
解决了它.
就像我一样,它与mongoid和DataMapper发生冲突. 如果有人偶然发现这个问题,那是因为DataMapper和Mongoid都在使用gte,gt,lt,lte等运算符来扩展Symbol. 为了避免这种冲突,只需使用mongoids替代语法: 代替: order_by(:created_at.desc) 和 where(:type.ne => 'Class') 用这个: order_by(:created_at => :desc) 和 where(:type => {'$ne' => 'Class'}) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |