Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails ruby:在进行同样处理nil的不区分大小写的比较时,如何避免if-then-else_Ruby On Rails_Ruby_Conditional_Null - Fatal编程技术网

Ruby on rails ruby:在进行同样处理nil的不区分大小写的比较时,如何避免if-then-else

Ruby on rails ruby:在进行同样处理nil的不区分大小写的比较时,如何避免if-then-else,ruby-on-rails,ruby,conditional,null,Ruby On Rails,Ruby,Conditional,Null,我经常发现自己不得不做一个额外的nil检查,以避免抛出一个“undefined for nil”错误,我很确定这是不必要的 在一个常见的例子中,当查看可选的url参数时,例如可能存在或不存在的url参数,我希望它们不区分大小写(如果存在) 例如,我的一个controller方法不需要&showdate=true,我喜欢通过不关心true vs true vs true来让它变得用户友好 我只能说 @showdate = params[:showdate] == "true" 但这是一个较低的假

我经常发现自己不得不做一个额外的nil检查,以避免抛出一个“undefined for nil”错误,我很确定这是不必要的

在一个常见的例子中,当查看可选的url参数时,例如可能存在或不存在的url参数,我希望它们不区分大小写(如果存在)

例如,我的一个controller方法不需要&showdate=true,我喜欢通过不关心true vs true vs true来让它变得用户友好

我只能说

@showdate = params[:showdate] == "true"
但这是一个较低的假设

如果我这样做:

@showdate = params[:showdate].lower == "true"
如果url中缺少showdate,它当然会抛出一个不需要的错误,因为nil.lower会抛出一个错误

因此,我在代码中经常做类似的事情:

if params[:showdate] 
  @showdate = params[:showdate].lower == "true"
else
  @showdate = false (or maybe nil)
我知道有更好的方法,只是不知道是什么。任何帮助都将不胜感激。

Rails

@showdate = params[:showdate].try(:downcase) == "true"

轨道


你可以这样做:

@showdata = (params[:showdate] || '').downcase == 'true'

你可以这样做:

@showdata = (params[:showdate] || '').downcase == 'true'

杰出的:。忘记即将扫描不要忘记to_s,否则会抛出我提到的错误。这是一个简单的解决方案,谢谢!我没想到会用这种方式来演奏弦乐。好极了:。忘记即将扫描不要忘记to_s,否则会抛出我提到的错误。这是一个简单的解决方案,谢谢!我没想到会用那样的方式来表达。。。。或者您可以将两个答案混合在一起@showdate=!!参数[:showdate]。请尝试:停机。。。或者您可以将两个答案混合在一起@showdate=!!参数[:showdate]。请尝试:downcase
@showdata = (params[:showdate] || '').downcase == 'true'