ruby-on-rails 使用字符串参数(如“2.months”)执行日期计算

qmb5sa22  于 2023-06-25  发布在  Ruby
关注(0)|答案(2)|浏览(85)

我尝试在Ruby on Rails项目中执行一些Date计算,其中我有一个period变量,必须执行类似Date.current - period的操作
因为period变量包含一个类似"2.months"的字符串,所以当我执行上述计算时,我得到一个expected numeric错误。
有没有不涉及使用eval方法或任何其他不被认为“安全”的方法的变通方法?

dba5bblo

dba5bblo1#

您必须自己解析字符串,并确保它是安全的,例如:

str = '2.months'

regex = /^(?<number>\d{1,2})\.(?<unit>months?|days?)$/

test = str.match regex

puts test[:number] => '2'
puts test[:unit] => 'months'
mspsb9vt

mspsb9vt2#

可以使用send

> num, period = '2.months'.split('.')
> num.to_i.send(period).ago # Equivalent to Date.current - period

它应该用秒[s]、分钟[s]、...、天[s]、周[s]等来工作。
参见https://api.rubyonrails.org/classes/Numeric.htmlhttps://api.rubyonrails.org/classes/ActiveSupport/Duration.html

相关问题