【问题标题】:FrozenError - can't modify frozen String (ruby 2.5+)FrozenError - 无法修改冻结字符串(ruby 2.5+)
【发布时间】:2019-04-23 16:55:28
【问题描述】:

我正在尝试将我们项目中的 ruby​​ 更新到 2.5 及更高版本,并将捆绑器从 1.17.2 更新到 2.0.1。这样做之后,运行我们的应用程序会在多个地方产生以下错误:

FrozenError - can't modify frozen String:

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

【问题讨论】:

  • 看起来这是 Ruby 2.5 中的一个错误。根据this issue 的说法,它可能已经在 2.5.3 或 2.6 中修复。
  • 尝试添加方法“dup”stackoverflow.com/questions/2204945/…
  • @moveson 我不认为它是固定的。我尝试了 2.5.3、2.5.5 和 2.6.2 并且每次都得到相同的错误
  • @AndriyKondzolko 不要认为这对我有用,我需要修改实际对象,而不是复制它。
  • 能否包含错误回溯和您正在使用的 Rails 版本?

标签: ruby-on-rails ruby bundler


【解决方案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

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

【讨论】:

    猜你喜欢
    • 2022-10-23
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-19
    相关资源
    最近更新 更多