Ruby on rails 无法在ruby on rails 5.0模型中使用活动记录时间方法
我目前无法使用ruby on rails 5.0模型中的任何活动支持时间方法,如下所示:Ruby on rails 无法在ruby on rails 5.0模型中使用活动记录时间方法,ruby-on-rails,ruby,activerecord,time,Ruby On Rails,Ruby,Activerecord,Time,我目前无法使用ruby on rails 5.0模型中的任何活动支持时间方法,如下所示: 5.seconds 2.days 10.minutes 抛出一个错误: NoMethodError:AS::Duration:0x007f97a5903b90@value=5,@parts=[:seconds,5]]的未定义方法“seconds”是什么意思?发送 编辑:这是导致问题的实际代码 ReminderJob.set(wait: 5.seconds).perform_later(self.user.
5.seconds
2.days
10.minutes
抛出一个错误:
NoMethodError:AS::Duration:0x007f97a5903b90@value=5,@parts=[:seconds,5]]的未定义方法“seconds”是什么意思?发送
编辑:这是导致问题的实际代码
ReminderJob.set(wait: 5.seconds).perform_later(self.user.id)
即使我可以看到人们使用下面的代码很好,它的工作
UserReminderJob.set(wait: 1.week).perform_later user
但是,它可以在我的控制台、控制器和视图中工作。错误消息指出对象是
AS::Duration:0x007f97a5903b90
,不是整数-5.seconds
的示例不会重现问题
这也是不寻常的,因为5.seconds
通常会返回ActiveSupport::Duration
对象,而不是AS::Duration
因此,我冒昧猜测您实际上使用的是rails行为,而不是内置的rails行为。,并返回一个行为与整数不同的对象
我认为您的错误可以通过:
5.seconds.seconds
实现真实再现。在标准rails中,这可以正常工作(并返回与5.seconds
相同的值),因为ActiveSupport::Duration
实例的行为类似于Integer
s。但是有了这个gem,它会因为上面的错误而失败。这些方法来自ActiveSupport
而不是ActiveRecord
。请为你的问题添加更多的上下文。您所做的和不起作用的内容。请显示不起作用的实际代码,因为该错误表示您正在(可能是间接地)调用5.seconds.seconds
,这与您的示例不匹配。我只是用导致错误的确切代码编辑了我的问题。您没有显示完整的错误。我敢打赌,该错误并非源于该行,而是来自调用wait.seconds
的作业内部的某个地方。我还解释了为什么这在标准rails代码中可以很好地工作。如果您希望继续使用此gem,一个快速修复方法可能是调用sereministerjob.set(wait:5)
——但是坦率地说,鉴于此错误的性质,我倾向于不使用该gem!好的,谢谢,我现在使用的是5秒而不是5.5秒,但是当提到几天或几周时,它会变得有点混乱。你也可以尝试分叉这个gem/编写你自己的扩展,以添加上面的行为-即类ActiveSupport::Duration;def秒;自己结束
。这将允许链接方法,如5.seconds.seconds==5.seconds
。