符号通常是这样表示的

:book_author_title

但如果我有一个字符串:

"Book Author Title"

在rails/ruby中是否有一种内置的方式将其转换为一个符号,在那里我可以使用:符号,而不只是做原始字符串正则表达式替换?


当前回答

"Book Author Title".parameterize('_').to_sym
=> :book_author_title

http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-parameterize

Parameterize是一个rails方法,它允许您选择想要的分隔符。默认为破折号“-”。

其他回答

"Book Author Title".parameterize('_').to_sym
=> :book_author_title

http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-parameterize

Parameterize是一个rails方法,它允许您选择想要的分隔符。默认为破折号“-”。

这不是回答问题本身,但我发现这个问题的解决方案,将字符串转换为符号,并在哈希上使用它。

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}

希望它能帮助到像我这样的人!

Rails获得了提供此类方法的ActiveSupport::CoreExtensions::String::Inflections模块。它们都值得一看。举个例子:

'Book Author Title'.parameterize.underscore.to_sym # :book_author_title

来自:http://ruby-doc.org/core/classes/String.html # M000809

str.intern => symbol
str.to_sym => 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

应该去;)

这就是你要找的吗?:

:"Book Author Title"

:)