Techioz Blog

Ruby on Rails の現在の年

概要

Ruby on Rails で現在の年を取得するにはどうすればよいですか?

いろいろ試してみたのですが、

問題は、サーバーの起動後に年が変わった場合 (例: 新年後) に前年を返すことです。

関連するコード:

モデル醸造所.rb

class Brewery < ActiveRecord: :Base
...
validates :year, numericality: { only_integer: true, less_than_or_equal_to: Date.today.year }
...

新しい醸造所を作成するときに問題が発生するため、そのアクションが発生するたびに Date.today.year が評価されると想定しました。

解決策

あなたの例では、Date.today.year はアプリケーションの起動時とクラスのロード時に 1 回だけ評価されるため、後で変更されることはありません。

ただし、バリデーター宣言でラムダを使用すると、その属性の検証がチェックされるたびにラムダが評価されます。

validates :year, numericality: { 
  only_integer: true, 
  less_than_or_equal_to: ->(_brewery) { Date.current.year }
}

さらに、現在のメソッドはタイムゾーン設定に注意を払うため、Date.today の代わりに Date.current を使用することをお勧めします。