Ruby/Rails 三元和范围

Ruby/Rails ternary and range

我想过滤一个参数,如果它在 1 到 100 的范围内。

控制器:

@range = search_range(params[:range])

助手:

def search_range(range)
  range = range.to_i
  range == 1..100 ? range : 30
end

但它总是 returns 30... 尝试了很多东西并且正常 "if/else" 但想要三元运算符。 谢谢

如果您的 params[:range] return 是一个数字,我认为您可能需要如下内容:

def search_range(range)
  range = range.to_i
  range == (1..100).include?(range) ? range : 30
end

你是这个意思吗? IE。如果 'range' 变量在 1 到 100 之间 return 它,否则 30?

更新:

我已经对页面上的选项进行了快速基准测试,between? 出现得最快:

              user     system      total        real
include?  0.230000   0.000000   0.230000 (  0.239637)
between?  0.130000   0.000000   0.130000 (  0.129158)
===       0.290000   0.000000   0.290000 (  0.293817)

Just want to check if params[:range] is between 1..100. If not return 30

这应该有效:

def search_range(range)
  range = range.to_i
  range.between?(1, 100) ? range : 30
end

您的代码的问题是 == 比较对象,即:

20 == 1..100
#=> false

检查整数 20 是否(数值上)等于范围 1..100。当然不是,1..100 甚至不是一个数字。