我需要包含哪些模块才能在Ruby中使用5秒钟?

35

因为显然require 'date'没有包含小时或秒等方法:

undefined method `hours' for 5:Fixnum (NoMethodError)

我有什么遗漏吗?5.seconds只能在Rails中使用吗?如果是这样的话,在Ruby脚本中使用它需要哪个require语句呢?

3个回答

100

虽然这是一个老问题,但是对于像我这样的谷歌搜索者来说仍然有参考价值:

require 'active_support/time'

无论如何,对于宝石版本3.2.11来说。


2
真的,就像接受的答案中提到的那样,仅仅执行 require "active_support" 是不够的。 - Bibek Shrestha
这在我的irb中可行。但是在将gem 'active_support/time'添加到gemfile后,我收到了以下错误信息:Could not find gem 'active_support/time' in any of the gem sources listed in your Gemfile. - stevec
应该标记为正确答案。仅使用'require' 'active_support'是不够的(至少在ruby版本> '2.4.2')。 - Cédric ZUGER
如果您正在运行一个没有railsruby项目,请确保使用命令gem install railsrails安装到项目中,因为该扩展是一个rails扩展。然后在您的项目中添加require 'active_support/time' - Promise Preston

12

以下方法适用于我

irb
>> require 'active_support'
=> true
>> 5.hours
=> 18000 seconds

根据你的环境和Rails版本,你可能需要在require 'active_support'行之前执行require 'rubygems'

如果你使用较旧的Rails版本,则可能还需要执行require 'activesupport'而不是active_support


1
如果您编辑了帖子,我将接受这个答案(如果您不编辑它,我会给它点“踩”)。在使用active_support之前,您需要首先require 'rubygems'。 - aarona
1
原始脚本对我来说可以直接使用,但还是进行了编辑。请注意,对于需要rubygems的库代码,通常被认为是不好的实践,请参阅http://www.rubyinside.com/why-using-require-rubygems-is-wrong-1478.html。 - Steve Weet
只要这是必须的东西让它真正起作用,那么这并不是不好的做法。 - aarona
这在我安装了Rails 3.2.1的OS X上无法工作,无论是带有require 'rubygems'语句还是没有。我需要做些特别的事情吗? - Mike Ottum
8
好的,我明白了,我需要添加“require 'active_support/core_ext/numeric/time'”,根据这里的评论:https://dev59.com/eG025IYBdhLWcg3wnXSf#5905875。 - Mike Ottum

3
ActiveSupport::CoreExtensions::Numeric::Time 可能是与数字和时间相关的一个核心扩展。

2
链接:http://api.rubyonrails.org/classes/ActiveSupport/CoreExtensions/Numeric/Time.html - Zachary Wright

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接