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 を使用することをお勧めします。