符号通常是这样表示的
:book_author_title
但如果我有一个字符串:
"Book Author Title"
在rails/ruby中是否有一种内置的方式将其转换为一个符号,在那里我可以使用:符号,而不只是做原始字符串正则表达式替换?
:
在Rails中,你可以使用underscore方法来做到这一点:
underscore
"Book Author Title".delete(' ').underscore.to_sym => :book_author_title
更简单的代码是使用regex(适用于Ruby):
"Book Author Title".downcase.gsub(/\s+/, "_").to_sym => :book_author_title
来自:http://ruby-doc.org/core/classes/String.html#M000809
str.intern => symbol str.to_sym => symbol
返回与str对应的符号,如果该符号以前不存在,则创建该符号。看到Symbol#id2name。
str
Symbol#id2name
"Koala".intern #=> :Koala s = 'cat'.to_sym #=> :cat s == :cat #=> true s = '@cat'.to_sym #=> :@cat s == :@cat #=> true
这也可以用来创建不能用:xxx表示法表示的符号。
:xxx
'cat and dog'.to_sym #=> :"cat and dog"
但是对于你的例子…
"Book Author Title".gsub(/\s+/, "_").downcase.to_sym
应该去;)
Rails获得了ActiveSupport::CoreExtensions::String::Inflections模块,它提供了这样的方法。它们都值得一看。举个例子:
ActiveSupport::CoreExtensions::String::Inflections
'Book Author Title'.parameterize.underscore.to_sym # :book_author_title
"Book Author Title".parameterize('_').to_sym => :book_author_title
< a href = " http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html method-i-parameterize " > http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html method-i-parameterize < / >
Parameterize是一个rails方法,它允许您选择想要的分隔符。默认为破折号“-”。
这就是你要找的吗?:
:"Book Author Title"
:)
intern→符号 返回与str对应的Symbol,如果符号之前不存在,则创建该符号
"edition".intern # :edition
http://ruby-doc.org/core-2.1.0/String.html#method-i-intern
这不是回答问题本身,但我发现这个问题的解决方案,将字符串转换为符号,并在哈希上使用它。
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}
希望它能帮助到像我这样的人!