ruby-on-rails - Ruby 将字符串转换为下划线,避免在结果字符串中出现 "/"

标签 ruby-on-rails ruby ruby-on-rails-6

我有一个名称间隔类..

"CommonCar::RedTrunk"

我需要将它转换为带下划线的字符串"common_car_red_trunk",但是当我使用

"CommonCar::RedTrunk".underscore,我得到的是 "common_car/red_trunk"

还有其他方法可以完成我需要的吗?

最佳答案

解决方案:

"CommonCar::RedTrunk".gsub(':', '').underscore

或:

"CommonCar::RedTrunk".sub('::', '').underscore

或:

"CommonCar::RedTrunk".tr(':', '').underscore

备用:

或者改变其中任何一个,首先执行 underscore(),然后使用您想使用的任何方法将“/”替换为“_”。

说明:

虽然所有这些方法看起来基本相同,但存在可能非常有影响力的细微差别。

简而言之:

  • gsub() – 使用正则表达式进行模式匹配,因此,它会找到任何出现的 ":" 并将其替换为 "".

  • sub() – 使用正则表达式进行模式匹配,类似于 gsub(),不同之处在于它仅查找第一次出现( gsub() 中的“g”表示“全局”)。这就是为什么在使用该方法时,必须使用"::",否则将只剩下一个":"。请记住此方法,它仅适用于单嵌套命名空间。意思是 "CommonCar::RedTrunk::BigWheels" 将被转换为 "CommonCarRedTrunk::BigWheels"

  • tr() – 使用字符串参数作为单个字符替换数组。在这种情况下,因为我们只是替换单个字符,所以它的工作方式与 gsub() 相同。但是,如果您想用“EX”替换“on”,例如,gsub("on", "EX") 将生成 "CommEXCar::RedTrunk"tr("on", "EX") 会生成 "CEmmEXCar::RedTruXk"

文档:

https://apidock.com/ruby/String/gsub

https://apidock.com/ruby/String/sub

https://apidock.com/ruby/String/tr

关于ruby-on-rails - Ruby 将字符串转换为下划线,避免在结果字符串中出现 "/",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65361330/

相关文章:

ruby-on-rails - 如何在 rails 中给订单送货地址和账单地址

ruby-on-rails - Sidekiq 工作人员无法写入数据库或日志文件

ruby-on-rails - 如何仅在注册时使用 rails devise 验证某些字段

javascript - 如何将 activeadmin 查询字符串传递给batch_action?

ruby-on-rails - 在 heroku 上找不到 gem bundler (>= 0) (Gem::GemNotFoundException)

ruby-on-rails - capistrano 3.0.1 在使用 capistrano/rails/assets 时不知道如何构建任务 'starting'

ruby - RubyMine 5.4 中的 JDBC 错误

ruby-on-rails - ActionText 的非图像附件问题

simple-form - Rails 6 操作文本 - 表单验证错误

ruby-on-rails - 来自模型属性的 ActiveAdmin 自定义过滤器