2

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:in 'method_missing': 未定義のメソッド `has_key?' 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 が作成されているため ('rbtest')、DB インスタンスへの接続は問題ないように見えますが、コレクションとドキュメントは失敗します。私はすでに 'create!' で試しました。と「安全に保存してください!」無駄に。

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!
4

1 に答える 1

3

問題はあなたのinitialize方法です.mongoidが提供するものをオーバーライドしているため、mongoidの内部の一部がセットアップされていません.

初期化メソッドを削除するか、mongoid の実装を呼び出す必要があります。super

于 2013-06-07T09:13:11.453 に答える