假设我有一个名字叫做"Master Yoda"
如何自动将它转换为小写,并用下划线替换空格...或者只是去掉空格。
所以可能变成master_yoda
或masteryoda
我正在寻找最简洁的解决方案。
假设我有一个名字叫做"Master Yoda"
如何自动将它转换为小写,并用下划线替换空格...或者只是去掉空格。
所以可能变成master_yoda
或masteryoda
我正在寻找最简洁的解决方案。
'Master Yoda'.underscore # => 'master yoda'
'MasterYoda'.underscore # => 'master_yoda'
'Master Yoda'gsub(' ', '') # => 'MasterYoda'
'Master Yoda'.gsub(' ', '').downcase # => 'masteryoda'
实现此方法的方式是使用 Rails 的 ActiveSupport::CoreExtensions::String::Inflections
模块中的 underscore
方法。
另外,如果任何原生的 Rails 方法不能完全满足您的需求,请确保单击 api.rubyonrails.org 上的“显示源代码”链接。在这种情况下,显示 Inflections.underscore
的源代码告诉我们它实际上只是在调用调用者字符串对象上的 Inflector.underscore
。
搜索该文档,我们可以找到真正执行工作的方法(可以说)在这里:http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#M000710
我知道你想要最简洁的答案,但是要知道了解事物在“引擎盖下”的工作原理相对简单(并且学习也很有益)。
"Blah Blah".underscore # => "blah blah"
,"BLah Blah".underscore # => "b_lah blah"
……underscore
方法用于模块等:"ActiveRecord::Base".underscore # => "active_record/base"
。 - rfundukunderscore
仍然不打算用于此,但你的建议是简单地阅读代码并编写自己的版本(也许叫做underscorize
?:))很有道理。我删除了我的答案,并从你的答案中编辑了underscorize部分,以便我可以撤回我的反对票。 - rfundukInflector.underscore
似乎主要用于字符串模块名称的使用,因此需要gsub.(/::/,'/')
。不过,检查非常易读的源代码应该允许 OP 简单地找到答案。无论如何,我仍然认为这个解决方案是最简洁、最本地化的 Rails 实现方式。 - TJ Koblentzgsub(/\s/, '_')
将是更好的解决方案来解决发帖者的问题。 - Ben Zittlau