Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 无法在ruby on rails 5.0模型中使用活动记录时间方法_Ruby On Rails_Ruby_Activerecord_Time - Fatal编程技术网

Ruby on rails 无法在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.

我目前无法使用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.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