ruby-on-rails - 在 ruby​​ 中使用 gsub 函数替换单词

标签 ruby-on-rails ruby gsub

我正在尝试用 ruby​​ 中的 gsub 函数替换字符串中的某些单词,但有时效果很好,在某些情况下会出现此错误?这种格式有什么问题吗

NoMethodError (undefined method `gsub!' for nil:NilClass):   

模型.rb

class Test < ActiveRecord::Base
  NEW = 1
  WAY = 2
  DELTA = 3

  BODY = {

    NEW => "replace this ID1",
    WAY => "replace this ID2 and ID3",
    DELTA => "replace this ID4"
  }
end

另一个模型.rb

class Check < ActiveRecord::Base
  Test::BODY[2].gsub!("ID2", self.id).gsub!("ID3", self.name)
end

最佳答案

啊,我找到了! gsub! 是一个非常奇怪的方法。首先,它替换了字符串,所以它实际上修改了你的字符串。其次,当没有进行替换时,它返回 nil。这一切都归结为您遇到的错误。

第一次执行该调用时,它会修改分配给常量的字符串,因此它读作 "replace this 3 and name"。当您尝试第二次运行它时,第一个 gsub 将无法找到它正在寻找的字符串,因此将返回 nil。然后在 nil 上执行第二个 gsub

关于如何解决它 - 这完全取决于您要实现的目标。对我来说,更改其他类常量(破坏封装)有点冒险。如果您只想在不修改原始字符串的情况下获得结果,请使用 gsub(无爆炸)。或者更好的是,将这些字符串转换为方法并使用插值而不是替换。

关于ruby-on-rails - 在 ruby​​ 中使用 gsub 函数替换单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28363665/

相关文章:

ruby-on-rails - 尝试启动 Rails 服务器时出错

ruby-on-rails - 构建 'large' Rails 应用程序的最佳实践

javascript - js.erb 文件执行了两次。 Ruby on Rails - private_pub

ruby-on-rails - 将调用者应用程序堆栈跟踪与每个 sql 查询一起记录

ruby - 寻找 。 - 在 ruby​​ 中输入 f

ruby-on-rails - 在 rails3 中使用非英语 Controller

r - 应用数据帧的多个 gsub 函数列,R

r - 我如何 'efficiently' 在大型文本语料库中用另一个(成对)替换字符串向量

如果 gsub 中的模式匹配,则仅返回值

ruby-on-rails - 错误//用法 : rails new APP_PATH [options]//when running 'rails server'