Ruby Chaîne de Nom de Classe
Je suis en train de créer une nouvelle classe qui hérite de ActiveRecord::Base
la classe doit être généré dynamiquement à partir d'une chaîne
"general_systems".camelize.singularize = Class.new < ActiveRecord::Base
Cependant, je reçois l'erreur:
undefined method `singularize=' for "GeneralSystems":String
J'ai aussi essayé de constantize
la chaîne
>> foo = "general_systems".camelize.singularize
=> "GeneralSystem"
>> foo.constantize
NameError: uninitialized constant GeneralSystem
from /var/lib/gems/1.9.1/gems/activesupport-3.0.5/lib/active_support/inflector/methods.rb:124:in `block in constantize'
from /var/lib/gems/1.9.1/gems/activesupport-3.0.5/lib/active_support/inflector/methods.rb:123:in `each'
from /var/lib/gems/1.9.1/gems/activesupport-3.0.5/lib/active_support/inflector/methods.rb:123:in `constantize'
from /var/lib/gems/1.9.1/gems/activesupport-3.0.5/lib/active_support/core_ext/string/inflections.rb:43:in `constantize'
from (irb):4
from /usr/bin/irb:12:in `<main>'
>> foo.constantize = Class.new
NoMethodError: undefined method `constantize=' for "GeneralSystem":String
from (irb):5
from /usr/bin/irb:12:in `<main>'
Toute aide serait grandement appréciée.
- vous êtes tyring pour appeler une méthode "general_systems".camelize.au singulier=(de la Classe.de nouvelles) qui n'est pas là. qu'est-ce exactement que vous essayez de faire?
- À en juger par l'un de vos commentaires sur quelqu'un à la réponse, vous avez déjà résolu le problème avec leur solution. Peut-être vous pouvez sélectionner une réponse maintenant?
InformationsquelleAutor Telmo | 2011-03-14
Vous devez vous connecter pour publier un commentaire.
Si vous êtes à l'aide de Rails, il fournit une méthode appelée
#constantize
qui va travailler:1.9.3p392 :019 > 'House::Owns'.constantize NoMethodError: undefined method
constantize " pour "Maison::Propriétaire":Chaîne à partir de (cisr):19 /Utilisateurs/ryan/.rvm/rubis/ruby 1.9.3-p392/bin/rir:16: <main>"Quelque chose comme cela?
Regardez cet exemple de "Le Livre De Ruby", inclus dans le Ruby 1.9 programme d'installation.
Si votre chaîne contient un espace de noms, vous pouvez utiliser:
Donné:
Vous pouvez chercher de la classe dans la plaine de Ruby avec:
ou si vous êtes à l'aide de Rails:
essayer
<pre><code>
.