Конвертировать строку в символьную форму в ruby - PullRequest
222 голосов
/ 05 января 2010

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

:book_author_title

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

"Book Author Title"

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

Ответы [ 6 ]

336 голосов
/ 05 января 2010

Rails получил модуль ActiveSupport::CoreExtensions::String::Inflections, который предоставляет такие методы. На них все стоит посмотреть. Для вашего примера:

'Book Author Title'.parameterize.underscore.to_sym # :book_author_title
220 голосов
/ 05 января 2010

из: 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

должен идти;)

22 голосов
/ 15 марта 2013
"Book Author Title".parameterize('_').to_sym
=> :book_author_title

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

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

13 голосов
/ 24 января 2014

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

"edition".intern # :edition

http://ruby -doc.org / ядро-2.1.0 / String.html # метод-я-стажер

11 голосов
/ 05 января 2010

В Rails вы можете сделать это, используя underscore метод:

"Book Author Title".delete(' ').underscore.to_sym
=> :book_author_title

Более простой код использует регулярные выражения (работает с Ruby):

"Book Author Title".downcase.gsub(/\s+/, "_").to_sym
=> :book_author_title
10 голосов
/ 10 декабря 2013

Это то, что вы ищете?:

:"Book Author Title"

:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...