Convertir cadena a símbolo capaz en Ruby

Resuelto Christopher asked hace 14 años • 7 respuestas

Los símbolos suelen representarse así.

:book_author_title

pero si tengo una cadena:

"Book Author Title"

¿Existe una forma integrada en Rails/Ruby para convertirlo en un símbolo donde pueda usar la : notación sin simplemente reemplazar una expresión regular de cadena sin formato?

Christopher avatar Jan 05 '10 13:01 Christopher
Aceptado

Rails obtuvo ActiveSupport::CoreExtensions::String::Inflectionsun módulo que proporciona dichos métodos. Vale la pena mirarlos todos. Para tu ejemplo:

'Book Author Title'.parameterize.underscore.to_sym # :book_author_title
Priit avatar Jan 05 '2010 08:01 Priit

de: http://ruby-doc.org/core/classes/String.html#M000809

str.intern => symbol
str.to_sym => symbol

Devuelve el Símbolo correspondiente a str, creando el símbolo si no existía anteriormente. Ver Symbol#id2name.

"Koala".intern         #=> :Koala
s = 'cat'.to_sym       #=> :cat
s == :cat              #=> true
s = '@cat'.to_sym      #=> :@cat
s == :@cat             #=> true

Esto también se puede utilizar para crear símbolos que no se pueden representar mediante la :xxxnotación.

'cat and dog'.to_sym   #=> :"cat and dog"

Pero por tu ejemplo...

"Book Author Title".gsub(/\s+/, "_").downcase.to_sym

debería ir ;)

zzeroo avatar Jan 05 '2010 06:01 zzeroo
"Book Author Title".parameterize('_').to_sym
=> :book_author_title

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

parametrizar es un método de rieles y le permite elegir cuál desea que sea el separador. Es un guión "-" por defecto.

cciollaro avatar Mar 15 '2013 14:03 cciollaro

En Rails puedes hacer esto usando underscoreel método:

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

El código más simple usa expresiones regulares (funciona con Ruby):

"Book Author Title".downcase.gsub(/\s+/, "_").to_sym
=> :book_author_title
Chandra Patni avatar Jan 05 '2010 06:01 Chandra Patni