我有一个方法在一段时间内调用ago
,但是时间应该能够作为一个参数提供,我已经大大简化了方法到重要的小部分,想象一下争论就像“日”或“月”
normalize_time(time)
1.time.ago
end
如何获取time
参数,并将其作为1
上的方法执行以获取Time对象?
答案 0 :(得分:2)
鉴于选择的数量是有限的和小的,您是否考虑使用案例陈述?
case time
when :day
1.day.ago
when :month
1.month.ago
when :year
1.year.ago
end
答案 1 :(得分:1)
根据您要传递的内容time
,您可以执行类似
1.send(time).ago
其中time
类似:day
等。
答案 2 :(得分:1)
1.send(time).ago
如果时间来自不受信任的来源,这将允许他们在1上调用他们想要的任何方法,所以要小心
答案 3 :(得分:1)
作为答案的替代方案(肯定有效),请考虑像chronic这样的库:
> require 'chronic'
> Chronic.parse('one day ago')
=> 2011-12-18 17:17:17 -0500
> Chronic.parse('one week ago')
=> 2011-12-12 17:17:21 -0500
> Chronic.parse('one month ago')
=> 2011-11-19 17:17:26 -0500
它可能比您实际想要的更多,并且您的解决方案几乎肯定更快。
答案 4 :(得分:1)
你可以“信任”,只需做一个“案例”......
case time
when "day", "month"
1.send(time).ago
end
答案 5 :(得分:0)
我想我在发布问题后就知道了,方法send()
似乎很好地实现了这个目标:
time = "day"
1.send(time).ago
这是一个很好的方法吗?