【Ruby】1.hourなどでNoMethodError (undefined method `hours'になる場合の対応
Paizaをやっててシリーズ
'1.hour'はTimeクラスじゃなかった(衝撃)
Paizaで時刻を扱え問題に出会いました。
そうなると、Timeクラスの計算をすることがあります。
例えば、現在の時間から10分後の時間を表示するとします。↓
now = Time.now # => 2020-01-31 00:58:34 +0900 future = now + 10.minites # NoMethodError (undefined method `minites' for 10:Integer)
はい、エラーが出ましたね。minites
など知らんと言われました。
あれ?メソッドがインポートされてないのかな?名著、チェリー本ではTimeクラスは組み込みモジュールと習ったが… っというか、Time.now
はしっかり動いてるしTimeクラスの問題じゃないっぽい
'1.hour'はActiveSupport::Durationクラス
こちら様の記事に答えがありました。
結論から申し上げますと、次のようにすると動きました。
require 'active_support/time' # 追加 now = Time.now # => 2020-01-31 01:08:14 +0900 future = now + 10.minites # => 2020-01-31 01:18:14 +0900
どうも私は勘違いしていたらしく、10.minutesとか1.hourはTimeクラスではありませんでした。(反省)
irb(main):> 1.hour.class => ActiveSupport::Duration