2012-01-14 2 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'에서 가져 오기/사용자/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'으로 초기화됩니다. 또한, 루비에는'Hash # get()'메소드가 없다. – mikeycgto

+0

이 문제가 발생한 것은 Mongo 1.9X입니다. 2.0 이상으로 업그레이드하면 문제가 해결 된 것으로 보입니다. – Williamf

관련 문제