2012-12-31 65 views
-2

在我的params散列中,我收到的值爲:limit。我需要將此值分配給變量limit,但不會超過50,如果未給出:limit的值,則缺省爲50使用默認值獲取最小值

首先,我這樣做:

limit = [params[:limit], 50].min 

這將使它最大的50,但將無法正常工作:如果不給予:limit,那麼這將讓limit0

接下來,我這樣做:

limit = [params[:limit] || 50, 50].min 

這工作,但我還是想知道,這是有效的,如果有更好的方法來做到這一點。

+0

當用戶沒有通過對'什麼:limit',爲什麼它變成了'0'? – sawa

+0

'params [:limit]'將默認爲'nil'而不是'0'。但是,在'nil'上執行'to_i'將返回'0' –

回答

1

您的解決方案很容易閱讀,但效率很低,因爲您每次都創建一個數組並調用min方法,這是一個矯枉過正的行爲。

一個可能的可讀性,更冗長,但更容易對機器的做法可能是:

if params[:limit] && params[:limit] < 50 
    params[:limit] 
else 
    50 
end 
+0

這是無效的。 – sawa

2

嘗試

limit = (params[:limit] && params[:limit] < 50) ? params[:limit] : 50