2016-09-19 4 views
0

Учитывая модель Mongoid:Значения по умолчанию для Mongoid Hash поля аксессора

class Counts 
    include Mongoid::Document 

    # lists of tag counts 
    field :tags, type: Hash, default: {} 
end 

c = Counts.new(tags = {new: 12, old: 7}) 

Я хотел бы переопределить c#tags[] так, что если ключ не установлен на tags поля, он должен вернуть значение по умолчанию 0 вместо из nil, как это:

c.tags['ancient'] 
# => 0 

ответ

1

Try хеш-значения по умолчанию, как показано ниже:

class Counts 
    ... 
    field :tags, type: Hash, default: Hash.new{ |h, k| h[k] = 0 } 
end 
+0

Интересно, но это только установит значение по умолчанию, когда ни один не будет сохранен (т.е. когда поле БД все еще 'nil'). Как только одно значение будет установлено, все остальные значения вернутся к нулю. Я думал об определении хэш-аксессора в поле «теги», например 'def tags [] (key)', но похоже, что мне, возможно, придется наследовать хэш-класс, чтобы сделать такое изменение –

Смежные вопросы