0

我在 ApplicationHelper 类中有以下帮助函数:

  def convert_to_range(n)
    [ (0..49), (50..99)].each do |range|
      if range.cover? (n)
        return "#{range.min}+"
      end
    end
  end

如果我将此功能加载到控制台,它可以工作:

 convert_to_range 66 
 # 50+

但是,当我从视图中调用它时,它会返回

[0..49, 50..99]

这里发生了什么,我该如何解决?

4

1 回答 1

1

您从视图中传递的数字必须超出您传递的范围。默认行为是返回方法的最后一行,但由于唯一的语句是 for,它返回计算结果的结果,即是您的两个 Range 对象的数组。

irb(main):013:0> convert_to_range 45
=> "0+"
irb(main):016:0> convert_to_range 99
=> "50+"
irb(main):014:0> convert_to_range 100
=> [0..49, 50..99]

如果你添加一个返回语句来表示一个错误,你会得到它而不是你的数组:

def convert_to_range(n)
    [(0..49), (50..99)].each do |range|
      if range.cover? (n)
        return "#{range.min}+"
      end
    end

    false
end

irb(main):025:0> convert_to_range  999
=> false

或者您可以选择引发异常。

于 2013-06-18T16:43:25.393 回答