255 votes

Convertir la chaîne en symbole-capable en rubis

Les symboles sont généralement représentés comme tels

 :book_author_title
 

mais si j'ai une chaîne:

 "Book Author Title"
 

est-ce qu'il y a un chemin intégré dans rails / ruby ​​pour le convertir en un symbole où je peux utiliser la notation : sans juste faire une chaîne brute regex remplacer?

384voto

Priit Points 2196

Rails a un module ActiveSupport::CoreExtensions::String::Inflections qui fournit de telles méthodes. Ils valent tous la peine d'être regardés. Pour votre exemple:

 'Book Author Title'.parameterize.underscore.to_sym
 

239voto

zzeroo Points 1626

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

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

Renvoie le Symbole correspondant à l' str, de la création du symbole si elle n'existait pas auparavant. Voir Symbol#id2name.

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

Cela peut aussi être utilisé pour créer des symboles qui ne peuvent pas être représentés à l'aide de l' :xxx de la notation.

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

Mais pour ton exemple ...

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

devrait aller ;)

27voto

Chris Ciollaro Points 133
 "Book Author Title".parameterize('_').to_sym
=> :book_author_title
 

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

parameterize est une méthode de rails, et il vous permet de choisir ce que vous voulez que le séparateur soit. C'est un tiret "-" par défaut.

11voto

Chandra Patni Points 9432

Dans Rails, vous pouvez le faire en utilisant la méthode underscore :

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

Le code le plus simple utilise regex (fonctionne avec Ruby):

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

11voto

Kai Stinchcombe Points 51

Est-ce ce que vous cherchez ?:

 :"Book Author Title"
 

:)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X