我有一個名爲只有調用一個方法,如果哈希填充
@filtered_ratings = params[:ratings].keys
但是一個實例變量,如果params[:ratings]
是零和#keys
被稱爲它存在時引發的錯誤。如果@filtered_ratings爲零,我希望將@filtered_ratings設置爲空數組(或散列)。有沒有一個簡單的方法做到這一點,沒有太多的代碼?謝謝!
我有一個名爲只有調用一個方法,如果哈希填充
@filtered_ratings = params[:ratings].keys
但是一個實例變量,如果params[:ratings]
是零和#keys
被稱爲它存在時引發的錯誤。如果@filtered_ratings爲零,我希望將@filtered_ratings設置爲空數組(或散列)。有沒有一個簡單的方法做到這一點,沒有太多的代碼?謝謝!
@filtered_ratings = params[:ratings].keys if params[:ratings].respond_to? :keys
編輯:
# if params[:ratings] is nil then return []
@filtered_ratings = params[:ratings].try(:keys) || []
試試這個:
@filtered_ratings = params[:ratings].try(:keys)
如果params[:ratings]
是nil
,它將返回nil
以及(而不是提高誤差)。
另外,您當然可以在空散列({}
)上調用#keys
。但是nil
不是其中之一。
你是對的。這是我的錯誤。 – Anconia
我會用andand寶石,因爲我已經習慣了:
@filtered_ratings = params[:ratings].andand.key
這將設置@filtered_ratings爲零,或關鍵值 - 可能或可能不是你想要的。
Rails有'#try'。它看起來(對我來說)太麻煩了,只爲了捆綁一個寶石。但是,如果你把它捆綁起來... :) –
@SergioTulentsev如果是一次性使用,我不會。我更喜歡它的可讀性,當我打破德米特的心時,它對我來說更加乾淨:)我也做了足夠的非Rails Ruby編碼,我只是習慣於將它編碼而不用重寫公認的簡單,更短的替換。 –
@DaveNewton非常有趣的寶石 - 我會記住,當時間到了。 – Anconia
我應該說得更好。如果'@filtered_ratings = params [:ratings] .keys'爲零,我希望將@filtered_ratings設置爲空數組(或散列)。對困惑感到抱歉! – Anconia
@Dylan看我的編輯。 – xdazz
@ Dylan ..如果你想把'@ filtered_ratings'設置爲一個空數組,你應該使用這個@filtered_ratings =(params [:ratings] || {})。keys' – rubyprince