2016-11-14 55 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