Mongoid 3.1.4 undefined方法'has_key?'在调用'Document.create'时

时间:2013-06-07 01:38:48

标签: ruby mongoid mongodb-ruby

我在尝试使用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 / attributes.rb:320:在'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

创建数据库时,与数据库实例的连接似乎正常('rbtest')但是,集合和文档失败。我已经尝试过“创造!”和'safe.save!'无济于事。

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

与往常一样,非常感谢任何帮助。

此致


更新 - 解决方案:

@Frederik Cheung的回答很明显。这是工作代码(用@ 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!

1 个答案:

答案 0 :(得分:3)

问题在于你的initialize方法:你正在覆盖mongoid提供的方法,所以某些mongoid的内部结构没有被设置。

您需要删除初始化方法或通过super

调用mongoid的实现