2016-11-14 90 views
1

我有一个融合了一些默认值,像这样一个@lead模型:如果属性是零,然后使用默认值从哈希

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

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

这一半的作品,但它不会使用DEFAULT利用率会@lead用法是nil。如何申请DEFAULT值给@lead只有如果@lead的价值是nil

我不想存储在迁移默认值有许多原因让出去了。

谢谢。

+4

你看了一下['散列#merge']块的版本(https://ruby-doc.org/core-2.2.0/Hash.html#method-i-merge)?例如'@ lead.attributes.symbolize_keys.merge(DEFAULTS){| key,old_val,new_val | old_val.nil? ? new_val:old_val}'btw'reverse_merge!'with'!'(bang)将不会产生任何影响,因为'attributes.symbolize_keys'创建的链我相信是一个副本而不是引用 – engineersmnky

+0

这很好,谢谢! –

+0

我会将块写为'{| _,old_val,new_val | old_val || new_val}' – moveson

回答

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

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

!操作将使@lead EQ FALS时@lead为零否则让它真正的情商。

+0

恐怕你不明白这个问题。在你的防守中,这是非常容易混淆的措辞。 –

+0

'除非'更习惯于比......如果......不是'如果!x'被称为@SergioTulentsev指出这不是问题的目的 – engineersmnky