当使用延迟作业调用模型方法时,字符串值将转换为 Time 对象
String value gets converted to Time object when a model method is called using delayed job
我正在使用延迟作业在另一个 Model
中对 Model
方法进行排队,如下所示:
article_loader.rb
date_value_in_string = "2017-06-21 07:17:00"
Article.delay(:queue => 'article_load').article_loading([date_value_in_string])
即使我已将 String
作为参数传递给该方法,但在该方法内部它会转换为 Time
对象。
article.rb
def self.article_loading(args)
date_value = args[0]
p date_value.class # Time
end
我不知道为什么会这样。任何帮助将不胜感激。
发生这种情况是因为字符串对于 Ruby 的默认 YAML 加载器来说看起来像一个日期时间。 DelayedJob 使用 YAML 进行序列化,所以这方面表现出来。
如果您想将字符串保留为字符串,请在其开头填充一些填充字符,例如 x
或其他内容。演示如下。
考虑这个 1.yml
:
ds: 2017-06-21 07:17:00
,然后,在 IRB 中,执行:
>> require "yaml"
>> YAML.load_file("1.yml")
=> {"ds"=>2017-06-21 11:17:00 +0400}
>> _["ds"].class
=> Time
我正在使用延迟作业在另一个 Model
中对 Model
方法进行排队,如下所示:
article_loader.rb
date_value_in_string = "2017-06-21 07:17:00"
Article.delay(:queue => 'article_load').article_loading([date_value_in_string])
即使我已将 String
作为参数传递给该方法,但在该方法内部它会转换为 Time
对象。
article.rb
def self.article_loading(args)
date_value = args[0]
p date_value.class # Time
end
我不知道为什么会这样。任何帮助将不胜感激。
发生这种情况是因为字符串对于 Ruby 的默认 YAML 加载器来说看起来像一个日期时间。 DelayedJob 使用 YAML 进行序列化,所以这方面表现出来。
如果您想将字符串保留为字符串,请在其开头填充一些填充字符,例如 x
或其他内容。演示如下。
考虑这个 1.yml
:
ds: 2017-06-21 07:17:00
,然后,在 IRB 中,执行:
>> require "yaml"
>> YAML.load_file("1.yml")
=> {"ds"=>2017-06-21 11:17:00 +0400}
>> _["ds"].class
=> Time