2016-03-09 53 views
0

我正在使用Rails 4.2.5。如果我有這一切如何在單行中編寫此代碼?

urls_hash[provider.capitalize] 

我得到的錯誤,「未定義的方法`[]爲零:NilClass」。我如何編寫上面這樣的,如果散列是空的,什麼都不輸出,否則散列的給定部分輸出?

+0

要實現 – Lymuel

+0

它應該是urls_hash [「提供者」]什麼做資本利用的方法應該叫上返回的值通過散列ie即urls_hash [「provider」] – sghosh968

+0

這取決於,也許哈希鍵是大寫提供程序? –

回答

2

唱紅寶石2.3+,你可以使用安全導航操作,以避免三元檢查:

urls_hash&.fetch(provider.capitalize, nil) 
0

嘗試

urls_hash.blank? ? "" : urls_hash[provider.capitalize] 

urls_hash[provider].capitalize 

第二個選項將大寫的urls_hash[provider]

+0

'urls_hash'是'nil',而不是'{}',仍然不會響應'[]'。 – PJSCopeland

+0

然後使用這個'urls_hash.blank? ? 「」:urls_hash [provider] .capitalize' – Lymuel

-1

內容你可以試試這個:如果你是U

urls_hash[provider].capitalize if urls_hash.has_key? "provider" 
+0

'urls_hash'是'nil',而不是'{}',並且也不會響應'has_key?'。 – PJSCopeland

1

Lucas Nelson's answer是有用的,但是這也適用,如果你正在使用Rails用Ruby 2.2以下。)

散列不是{}),它是完全丟失nil)。根據您的標籤我假設你使用Rails的,在這種情況下,你可以這樣做:

url_hash.try(:[], provider.capitalize) 

#try是基本相同#send,但nil.try回報nil。所以,你可以鏈接一個默認值到使用||操作上面的電話:

url_hash.try(:[], provider.capitalize) || 'Provider not specified' 
+0

非常正確。結果是一樣的。我很想說我喜歡這樣做,因爲它避免了在我的答案中使用'fetch'和一個零參數稍微古怪的用法。 –