Comment convertir la chaîne "User"
en User
?
Réponses
Trop de publicités?
delba
Points
4463
Chris Jester-Young
Points
102876
severin
Points
4781
psyho
Points
4116
Le meilleur moyen consiste à utiliser ActiveSupport's constantize:
'User'.constantize
La fonction const_get du noyau fonctionne également, mais uniquement si vous n'avez pas de constantes namespaced, donc quelque chose comme ceci:
Kernel.const_get('Foobar::User')
va échouer. Donc, si vous voulez une solution générique, il serait sage d'utiliser l'approche ActiveSupport:
def my_constantize(class_name)
unless /\A(?:::)?([A-Z]\w*(?:::[A-Z]\w*)*)\z/ =~ class_name
raise NameError, "#{class_name.inspect} is not a valid constant name!"
end
Object.module_eval("::#{$1}", __FILE__, __LINE__)
end