代码之家  ›  专栏  ›  技术社区  ›  Franck Boudraa

Ruby/Rails三元和范围

  •  0
  • Franck Boudraa  · 技术社区  · 7 年前

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

    控制器:

    @range = search_range(params[:range])
    

    帮手:

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

    但它总是返回30。。。尝试了很多东西和正常的“if/else”,但想要三元运算符。 谢谢

    2 回复  |  直到 7 年前
        1
  •  3
  •   Stefan    7 年前

    只想检查参数[:range]是否在1之间。。100.如果不返回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 甚至不是一个数字。

        2
  •  0
  •   SRack    7 年前

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

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

    你是这个意思吗?一、 E.如果“范围”变量在1到100之间,则返回它,否则返回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)