2016-09-19 2 views
0

ein Mongoid Modell Gegeben:Standardwert für Mongoid Hash Feld Accessor

class Counts 
    include Mongoid::Document 

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

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

Ich möchte c#tags[] so außer Kraft zu setzen, wenn ein Schlüssel nicht auf dem tags Feld gesetzt ist, sollte es einen Standardwert von 0 zurückgeben statt von nil wie folgt aus:

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

Antwort

1

Try Einstellung Standard Hash-Werte wie folgt:

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

Interessant, aber dies wird nur den Standardwert einstellen, wenn keiner gespeichert ist (dh. wenn das DB-Feld noch 'nil' ist). Sobald ein Wert gesetzt ist, werden alle anderen Werte wieder auf Null gesetzt. Ich dachte darüber nach, einen Hash-Accessor für das 'tags'-Feld zu definieren, wie' def tags [] (key) ', aber es sieht so aus, als müsste ich die Hash-Klasse erben, um eine solche Änderung vorzunehmen –

Verwandte Themen