gpt4 book ai didi

ruby-on-rails - 将字符串转换为 ActiveSupport::Duration

转载 作者:数据小太阳 更新时间:2023-10-29 07:26:45 25 4
gpt4 key购买 nike

如何将字符串转换为 ActiveSupport::Duration?

在 Rails 控制台中,此代码有效

Date.today + 1.month (or 22.days)

但这行不通

Date.today + '1.month' 

它说类型错误:应为数字

'1.month'来自数据库记录。

最佳答案

正如其他人所指出的,在您的字符串上使用 eval 会产生安全漏洞。

相反,您可以将字符串转换为 ActiveSupport::Duration在字符串的第一部分使用 .to_i 将其转换为整数,然后使用 .send 将字符串的第二部分转换为整数以将其转换为 Duration .像这样:

parts = '1.month'.split('.')
parts.first.to_i.send(parts.last)

为方便起见,您可以通过添加此文件 config/initializers/string.rb 来扩展 String 类:

# Helper extension to String class
class String
# Convert strings like "3.days" into Duration objects (via Integer)
def to_duration
super unless self =~ /\A\d+\.\w+\z/
parts = split('.')

allowed = %w(minutes hours days months years) # whitelist for .send
super unless allowed.include? parts.last

parts.first.to_i.send(parts.last)
end
end

然后在您的应用中,您可以对字符串调用 .to_duration

关于ruby-on-rails - 将字符串转换为 ActiveSupport::Duration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34506174/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com