2012-01-14 1 views
2

У меня есть модель, Entity.Mongoid: Добавлен хэш к модели, но не могу написать ему

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 

Но эта ошибка с неопределенным методом получает хэш. Если я попытаюсь создать для него инициализатор, чтобы установить значения в существующем документе, он ошибется с той же ошибкой. Что я делаю не так?

Initializer выглядит следующим образом:

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

Благодарности

+0

Вы можете публиковать сообщения об ошибке? –

+0

NoMethodError: undefined method 'get 'for {}: Hash \t от /Users/wflanagan/sites/marketfu/vendor/bundle/bundler/gems/mongoid-7b3cfd92c5ab/lib/mongoid/field.rb:50:in' get ' \t из /Users/wflanagan/sites/marketfu/vendor/bundle/bundler/gems/mongoid-7b3cfd92c5ab/lib/mongoid/attributes.rb:64:in 'read_attribute' \t из/Users/wflanagan/сайтов/marketfu /vendor/bundle/bundler/gems/mongoid-7b3cfd92c5ab/lib/mongoid/fields.rb:55:in 'block in create_accessors ' \t/Пользователи/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