FrozenError - 无法修改冻结字符串(ruby 2.5+)

Alo*_*ari 10 ruby ruby-on-rails bundler

我试图更新红宝石在我们的项目到2.5及以上,并从捆绑1.17.22.0.1。这样做之后,运行我们的应用程序会在多个地方产生以下错误:

FrozenError - can't modify frozen String:
Run Code Online (Sandbox Code Playgroud)

这是尝试在控制器 ( Time.zone = current_user.location.time_zone) 和其他地方设置时区的结果。

小智 1

您可以将 Time.use_zone(zone) 与块一起使用,例如:

class ApplicationController < ActionController::Base
  around_action :set_time_zone

  def set_time_zone
    if logged_in?
      Time.use_zone(current_user.location.time_zone) { yield }
    else
      yield
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

https://api.rubyonrails.org/classes/Time.html#method-c-zone-3D