2016-11-14 3 views
1

Ich habe ein Modell bekommt, das wie so ein @lead mit einigen Standardwerten übergeht:Wenn Attribut Null ist dann Standardwert verwenden, um von Hash-

DEFAULTS = { 
    inflation: 4.224/100, 
    usage: 12_000, 
    cost: 3250 
}.freeze 

@lead.attributes.symbolize_keys.reverse_merge!(DEFAULTS) 

in dieser Halbzeit funktioniert, aber es wird nicht die DEFAULT Nutzung, wenn die Verwendung @lead Verwendung ist nil. Wie kann ich DEFAULT Werte auf die @leadnur anwenden, wenn der @lead Wert nil ist?

Ich möchte aus mehreren Gründen keine Standardeinstellungen in der Migration speichern, das ist also out.

Danke.

+4

haben Sie sich die Blockversion von ['Hash # merge'] (https://ruby-doc.org/core-2.0/Hash.html#method-i-merge) angesehen? z.B. '@ lead.attributes.symbole_keys.merge (DEFAULTS) {| key, old_val, new_val | alt_val.nil? ? new_val: old_val} 'btw' reverse_merge! 'mit dem'! '(bang) hat keine Auswirkungen seit der Kette von' attributes.symbole_keys' Ich glaube, es ist eine Kopie keine Referenz – engineersmnky

+0

Das hat super funktioniert, danke! –

+0

Ich würde den Block als '{_ _, old_val, new_val | schreiben alt_val || new_val} ' – moveson

Antwort

0
DEFAULTS = { 
    inflation: 4.224/100, 
    usage: 12_000, 
    cost: 3250 
}.freeze 

if [email protected] 
    @lead.attributes.symbolize_keys.reverse_merge!(DEFAULTS) 
end 

Der ! werden von einem Operator machen @lead eq fals wenn @lead Null ist und sonst machen es wahr Gl.

+0

Sie haben die Frage nicht verstanden, fürchte ich. Zu Ihrer Verteidigung ist es sehr verwirrend formuliert. –

+0

'if 'ist idiomatischer als wenn..nicht oder' if! X' das gesagt wurde als @SergioTulentsev wies darauf hin, dass dies nicht der Zweck der Frage war – engineersmnky

Verwandte Themen