Answers:
Rails ActiveSupport::CoreExtensions::String::Inflections
提供了提供此类方法的模块。他们都值得一看。例如:
'Book Author Title'.parameterize.underscore.to_sym # :book_author_title
.to_s
并.humanize
应执行此工作,除非您需要保留全部大写。
来自:http : //ruby-doc.org/core/classes/String.html#M000809
str.intern => symbol
str.to_sym => symbol
返回与对应的Symbol str
,如果以前不存在则创建该符号。请参阅Symbol#id2name
。
"Koala".intern #=> :Koala
s = 'cat'.to_sym #=> :cat
s == :cat #=> true
s = '@cat'.to_sym #=> :@cat
s == :@cat #=> true
这也可以用于创建无法使用该:xxx
符号表示的符号。
'cat and dog'.to_sym #=> :"cat and dog"
但以您的示例为例...
"Book Author Title".gsub(/\s+/, "_").downcase.to_sym
应该去 ;)
to_sym
]也可用于创建无法使用:xxx表示法表示的符号是不正确的”。:'cat and dog'
与相同'cat and dog'.to_sym
。
:"cat and dog\n on a new line"
不需要的奇特的事情to_sym
。
"Book Author Title".parameterize('_').to_sym
=> :book_author_title
http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-parameterize
parameterize是一种rails方法,它使您可以选择想要的分隔符。默认情况下,它是破折号“-”。
intern→symbol返回与str对应的Symbol,如果以前不存在则创建符号
"edition".intern # :edition
在Rails中,您可以使用以下underscore
方法执行此操作:
"Book Author Title".delete(' ').underscore.to_sym
=> :book_author_title
更简单的代码是使用正则表达式(与Ruby配合使用):
"Book Author Title".downcase.gsub(/\s+/, "_").to_sym
=> :book_author_title
这不是在回答问题本身,而是在寻找用于将字符串转换为符号并在哈希上使用它的解决方案时发现了这个问题。
hsh = Hash.new
str_to_symbol = "Book Author Title".downcase.gsub(/\s+/, "_").to_sym
hsh[str_to_symbol] = 10
p hsh
# => {book_author_title: 10}
希望它能帮助像我这样的人!