Techioz Blog

Railsは有効期限が今日から1年かどうかをチェックします

概要

しようとしていますが、日付形式が正しくありません。コントローラーでも実行しています

データベースの有効期限の日付形式は 2025-01-15 08:00:00 です。

if @car_subscription.expiration_date.present?  && @car_subscription.expiration_date == @car_subscription.expiration_date == Date.today + 1.year 
   @car_subscription.update(new_cars: @car_subscription.new_cars = 20)
end

解決策

DateTime インスタンス (@car_subscription.expiration_date) と Date インスタンス (Date.today + 1.year) を比較しようとしています。実際、技術的には、これは間違った比較ではありません。

ただし、expiration_date フィールドがレコードの作成に応じて作成されるタイムスタンプであると仮定すると (時間/分/秒の値が大きく異なる場合があります)、Date.today + 1.year の戻り値はその最初の秒を参照します。日が経つと、ここで平等になる確率は非常に低いでしょう。

Expiration_date が今日から 1 年に等しいかどうかを確認したい場合は、このフィールドを日付オブジェクトとしてキャストする方が比較に適しています。

したがって、次のようなことを試すことができます。

if @car_subscription.expiration_date.present?  && @car_subscription.expiration_date.to_date == Date.today + 1.year 
  @car_subscription.update(new_cars: @car_subscription.new_cars = 20)
end

ちなみに、スニペットでは、以下のステートメント @car_subscription.expiration_date を 2 回書きました。これはタイプミスだと思います。

@Stefan の修正に感謝します。