Я использую количество секунд 1.year.to_i в 1 год. Но для рельсов 4 и 5 разница составляет 648 секунд или примерно 10 минут. Является ли это изменение преднамеренным? Если да, то в чем причина?





Это константа, определенная в ActiveSupport :: Duration, называется SECONDS_PER_YEAR, и ее значение равно 31556952.
Чтобы отследить это, вот шаги, которые я выполнил в pry, могут помочь вам или кому-то еще читать в будущем.
[8] pry(main)> show-source 1.year
...
def years
ActiveSupport::Duration.years(self)
end
[9] pry(main)> show-source ActiveSupport::Duration.years
...
def years(value) #:nodoc:
new(value * SECONDS_PER_YEAR, [[:years, value]])
end
[11] pry(main)> cd ActiveSupport::Duration
[12] pry(ActiveSupport::Duration):1> SECONDS_PER_YEAR
=> 31556952
Я создал и опубликовал на GitHub и только что получил идеальный ответ.
1.year is now provided by ActiveSupport::Duration and it follows the Gregorian calendar. Length of a Gregorian year => 365.2425 days which amounts to 31556952 seconds. What you are talking about is Julian year which is almost 11 minutes longer.
Так что в этом нет ничего странного.
https://github.com/rails/rails/issues/33978#issuecomment-424331247