Преобразование строки в символ-возможность в ruby
символы обычно представлены как таковые
:book_author_title
а если у меня есть строка:
"Book Author Title"
есть ли встроенный способ в rails / ruby, чтобы преобразовать его в символ, где я могу использовать : нотации, не просто делать "сырые" строковые выражения заменить?
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_titlehttp://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
Comments