2012-01-14 4 views
2

モデル、エンティティがあります。モンゴイ:モデルにハッシュを追加しましたが、書き込めません

class Entity 
    include Mongoid::Document 

    field :x 
    field :y 
    field :z, type => Hash, :default => {} # new field 

end 

新しいフィールド、ハッシュを追加しました。私はそれを使用しようとすると、私はエラーが発生します。私のコードは:

e = Entity.first 
if e.z["a"] # if there is a key of this in it? 
    e.z["a"] = e.z["a"] + 1 
else 
    e.z["a"] = 1 
end 

しかし、このエラーは、未定義のメソッドを取得します。既存のドキュメントの値を設定するためにイニシャライザを作成しようとすると、同じエラーでエラーが発生します。私は間違って何をしていますか?それをソートし

e = Entity.first 
e.write_attribute(:z, {}) 

おかげ

+0

あなたはエラーを投稿できますか? –

+0

NoMethodError:{}のための未定義メソッド 'get ':ハッシュ \t /Users/wflanagan/sites/marketfu/vendor/bundle/bundler/gems/mongoid-7b3cfd92c5ab/lib/mongoid/field.rb:50:in' getユーザ/ wflanagan /サイト/ marketfu /から \t '/Users/wflanagan/sites/marketfu/vendor/bundle/bundler/gems/mongoid-7b3cfd92c5ab/lib/mongoid/attributes.rb:64:in 'read_attributeから \t' /vendor/bundle/bundler/gems/mongoid-7b3cfd92c5ab/lib/mongoid/fields.rb:55:inブロック内のcreate_accessors \t/Users/wflanagan/sites/marketfu/app/models/ – Williamf

答えて

1

初期化子は次のようになります。

答えがMongoidに設定することであると思われるにハッシュを1.9.5:

field :hash_field, :type => Hash, :default => Hash.new 

、それがアクセスし、それを初期化することができます。理由をよく理解していないが、答えが嬉しい!

+0

通常、フィールド'nil'に初期化されます。さらに、rubyには 'Hash#get()'メソッドはありません。 – mikeycgto

+0

この問題があったのはMongo 1.9Xでした。 2.0以上にアップグレードすると、それが解決されたようです。 – Williamf

関連する問題