回答:
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メソッドであり、セパレーターをどのようにするかを選択できます。デフォルトではダッシュ「-」です。
インターン→シンボルstrに対応するシンボルを返し、以前に存在しなかった場合はシンボルを作成します
"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
これはあなたが探しているものですか?:
:"Book Author Title"
:)