2012-12-31 66 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