我在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]
这里会发生什么以及如何解决?
答案 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
或者您可以选择提出异常。