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