Преобразование строки в символ в ruby
символы обычно представлены как таковые
:book_author_title
а если у меня есть строка:
"Book Author Title"
есть ли встроенный путь в rails / ruby, чтобы преобразовать его в символ, где я могу использовать :
нотация без Просто выполнения необработанной строки regex replace?
6 ответов
рельсы есть ActiveSupport::CoreExtensions::String::Inflections
модуль, предоставляющий такие методы. На них стоит посмотреть. Для вашего примера:
'Book Author Title'.parameterize.underscore.to_sym # :book_author_title
from: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".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
более простой код использует regex (работает с Ruby):
"Book Author Title".downcase.gsub(/\s+/, "_").to_sym
=> :book_author_title