我遇到的问题是,当我将一些Date
个对象作为参数传递给不同的方法时,它们会变成String
。
在我的Rails应用程序中,有一个服务调用Sidekiq worker来执行模型中的方法。
初始化服务对象时,它具有Date
个实例方法。我已经使用调试器确认了它们的类型。
它使用perform_async
将实例方法传递给Sidekiq工作者。 perform
方法是Sidekiq是一种单行方法,它调用模型中的方法,将从服务接收的参数传递给模型。
在模型方面,从Sidekiq工作者传入的参数不再是Date
类型。它们是String
(例如" 2015-01-20")。我已经使用degugger证实了这一点。
有关为何发生这种情况的任何想法?
答案 0 :(得分:21)
当您在Sidekiq工作者上调用perform_async
方法时,提供的参数将转换为JSON,以便它们可以存储在Sidekiq后台工作者从中拉出的Redis队列中,然后从中转换回原始类型要在后台工作进程中传递给perform
的JSON。因此,最好将简单的论据传递给您的Sidekiq工作人员;事实上,it's a best practice。
对于您的特定问题,您可以将传递给工作人员的执行方法的日期,并使用Date.parse(date_string)
将其重新转换为Date
对象。在这种情况下,您可能还想在to_s
的参数上调用perform_async
,只是为了让代码的后续读者明白传递给perform
的是一个字符串