95 votes

ruby convertit le nom de la classe dans la chaîne en classe réelle

Comment appeler une classe à partir d'une chaîne de caractères contenant le nom de cette classe ? (Je suppose que je pourrais faire case/when mais cela semble laid).

La raison de ma question est que j'utilise l'option acts_as_commentable entre autres, qui stockent le commentable_type comme une colonne. Je veux pouvoir appeler n'importe quelle classe commentable particulière pour faire un find(commentable_id) sur elle.

Merci.

6voto

SSR Points 1546

Si vous voulez convertir une chaîne de caractères en un nom de classe réel pour accéder au modèle ou à toute autre classe.

str = "group class"

> str.camelize.constantize 'or'
> str.classify.constantize 'or'
> str.titleize.constantize

Example :
  def call_me(str)
    str.titleize.gsub(" ","").constantize.all
  end

Call method : call_me("group class")

Result:
  GroupClass Load (0.7ms) SELECT `group_classes`.* FROM `group_classes`

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