ruby on rails - tag - Convertir la cadena a símbolo capaz en ruby
haml tutorial (6)
Los símbolos son usualmente representados como tales
:book_author_title
pero si tengo una cadena:
"Book Author Title"
¿hay una forma integrada en rieles / rubí para convertirlo en un símbolo donde pueda usar la notación :
sin hacer simplemente una expresión en bruto de expresiones regulares reemplazar?
¿Es esto lo que estás buscando ?:
:"Book Author Title"
:)
En Rails puedes hacer esto usando el método de underscore
:
"Book Author Title".delete('' '').underscore.to_sym
=> :book_author_title
El código más simple es usar expresiones regulares (funciona con Ruby):
"Book Author Title".downcase.gsub(//s+/, "_").to_sym
=> :book_author_title
Rails obtuvo el ActiveSupport::CoreExtensions::String::Inflections
que proporciona dichos métodos. Todos valen la pena mirarlos. Para su ejemplo:
''Book Author Title''.parameterize.underscore.to_sym # :book_author_title
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 usar para crear símbolos que no se pueden representar usando la notación :xxx
.
''cat and dog''.to_sym #=> :"cat and dog"
Pero para tu ejemplo ...
"Book Author Title".gsub(//s+/, "_").downcase.to_sym
debería ir ;)
intern → symbol Devuelve el símbolo correspondiente a str, creando el símbolo si no existía anteriormente
"edition".intern # :edition
"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 lo que desea que sea el separador. Es un guión "-" por defecto.