J'essaie de convertir un nom de snake case en camel case. Existe-t-il des méthodes intégrées ?
Eg : "app_user"
a "AppUser"
(J'ai une chaîne "app_user"
Je veux convertir ça en modèle AppUser
).
J'essaie de convertir un nom de snake case en camel case. Existe-t-il des méthodes intégrées ?
Eg : "app_user"
a "AppUser"
(J'ai une chaîne "app_user"
Je veux convertir ça en modèle AppUser
).
Si vous utilisez Rails, Chaîne#camelize est ce que vous recherchez.
"active_record".camelize # => "ActiveRecord"
"active_record".camelize(:lower) # => "activeRecord"
Si vous voulez obtenir une classe réelle, vous devez utiliser Chaîne#constancier en plus de cela.
"app_user".camelize.constantize
Vous devriez ajouter que c'est un ajout de Rails à String, cela ne fonctionne pas avec Ruby pur.
C'est marqué ruby-on-rails
donc, je suppose, que ce n'est pas un problème. Mais merci de l'avoir mentionné.
Il n'est pas nécessaire de caméliser avant de constancier. Utilisez #classify
à la place. "some_namespace/module/class_name".classify => "SomeNamespace::Module::ClassName"
Et celui-là ?
"hello_world".split('_').collect(&:capitalize).join #=> "HelloWorld"
Trouvé dans les commentaires ici : Classifier une chaîne Ruby
Voir le commentaire de Wayne Conrad
Si vous utilisez Rails, utilisez classify
. Il gère bien les cas limites.
"app_user".classify # => AppUser
"user_links".classify # => UserLink
Note :
Cette réponse est spécifique à la description donnée dans la question (elle n'est pas spécifique au titre de la question). Si quelqu'un essaie de convertir une chaîne de caractères en minuscules, il doit utiliser la méthode suivante Sergio Réponse de la Commission. L'auteur de la question déclare qu'il veut convertir app_user
a AppUser
(pas App_user
), d'où cette réponse..
Notez que classify
renvoie une chaîne de caractères, vous devez appeler constantize
ensuite pour la convertir en une classe réelle.
Une mise en garde importante concernant classify
c'est que les chaînes pluralisées deviennent singulières... 'age_in_years'.classify
devient AgeInYear
Source : http://rubydoc.info/gems/extlib/0.9.15/String#camel_case-instance_method
À des fins d'apprentissage :
class String
def camel_case
return self if self !~ /_/ && self =~ /[A-Z]+.*/
split('_').map{|e| e.capitalize}.join
end
end
"foo_bar".camel_case #=> "FooBar"
Et pour la variante lowerCase :
class String
def camel_case_lower
self.split('_').inject([]){ |buffer,e| buffer.push(buffer.empty? ? e : e.capitalize) }.join
end
end
"foo_bar".camel_case_lower #=> "fooBar"
Je suis venu ici en cherchant l'inverse de ta question, en passant de l'étui à chameau à l'étui à serpent. Utilisez soulignement pour cela (ne pas décamériser) :
AppUser.name.underscore # => "app_user"
ou, si vous avez déjà une chaîne de caractères avec des majuscules :
"AppUser".underscore # => "app_user"
ou, si vous voulez obtenir le nom de la table, ce qui est probablement la raison pour laquelle vous voulez le cas du serpent :
AppUser.name.tableize # => "app_users"
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.
0 votes
Cela répond-il à votre question ? Conversion de la casse de camel en casse de soulignement en ruby