Преобразование строки в символ-возможность в ruby



символы обычно представлены как таковые



:book_author_title


а если у меня есть строка:



"Book Author Title"


есть ли встроенный способ в rails / ruby, чтобы преобразовать его в символ, где я могу использовать : нотации, не просто делать "сырые" строковые выражения заменить?

461   6  

6 ответов:

рельсы есть 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".parameterize('_').to_sym
=> :book_author_title

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

parameterize-это метод rails, и он позволяет выбрать, каким должен быть разделитель. Это тире "-" по умолчанию.

символ интерн → Возвращает символ, соответствующий str, создавая символ, если он ранее не существовал

"edition".intern # :edition

http://ruby-doc.org/core-2.1.0/String.html#method-i-intern

в 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"

:)

Comments

    Ничего не найдено.