Helper功能在控制台中工作但在View中失败

时间:2013-06-18 16:34:10

标签: ruby-on-rails helper

我在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]

这里会发生什么以及如何解决?

1 个答案:

答案 0 :(得分:1)

您从视图中传递的数字必须超出传入的范围。默认行为是返回方法的最后一行,但由于唯一的语句是for,它将返回评估的内容to,这是两个Range对象的Array。

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]

如果你添加一个return语句来表示错误,那么你将获得而不是你的数组:

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

或者您可以选择提出异常。