Mongoid 3.1.4 调用"Document.create"时未定义的方法"has_key?



我有一个问题,试图使用Mongoid (v 3.1.4)来坚持一个(非常简单的)实体到MongoDB (v 2.4.4)。我在OS x上使用MRI和Ruby 2.0.0-p195。

这是我的类(Person.rb):

require 'mongoid'
class Person
  include Mongoid::Document
  include Mongoid::Timestamps # currently can be ommitted
  field :name, type: String
  def initialize
    # is empty
  end
  def name
    @name
  end
  def name=(value)
    @name = value
  end
end
Mongoid.load!('config/mongoid.yml', :development)
user = Person.new
user.name = "John Doe"
user.create

最后一句话用

[…]mongoid/属性。在'method_missing':未定义的方法' has_key?' for nil:NilClass (NoMethodError)

这是我的'mongoid.yml':

development:
  sessions:
    default:
      database: rbtest
      hosts:
        - localhost:27017
test:
  sessions:
    default:
      database: test
      hosts:
        - localhost:27017
      options:
        consistency: :strong
        max_retries: 1
        retry_interval: 0

连接到DB实例似乎ok,因为DB被创建('rbtest'),但是,集合和文档失败。我已经尝试过"create!"one_answers"安全。保存!"

我试着实现has_key?方法,我找不到任何文档,所以我在这里有点茫然。

如往常一样,任何帮助都是非常感谢的。

问候,


UPDATE - SOLUTION:

@张国荣的回答非常正确。下面是工作代码(根据@mu-is-too-short的建议更新)

require 'mongoid'
class Person
  include Mongoid::Document
  field :name, type: String
end
Mongoid.load!('config/mongoid.yml', :development)
person = Person.new(:name => 'John Doe')
person.save!

问题是你的initialize方法:你重写了由mongoid提供的方法,所以一些mongoid的内部没有被设置。

您需要删除您的初始化方法或通过super调用mongoid的实现

相关内容

  • 没有找到相关文章

最新更新