alias_attribute et la création et la méthode avec le nom de l'attribut d'origine provoque une boucle

StackOverflow https://stackoverflow.com/questions/2924153

Question

Im essayant de créer dynamiquement une chaîne de méthode dans un attribut dans mon modèle. Maintenant, j'ai cette fonction:

def create_filtered_attribute(attribute_name)
          alias_attribute "#{attribute_name}_without_filter", attribute_name

          define_method "#{attribute_name}" do
            filter_words(self.send("#{attribute_name}_without_filter"))
          end
end

Je reçois une chaîne avec le nom d'attribut, alias il pour ' _without_filter (ou alias_method alias_method_chain échoue ici, parce que l'attribut isnt là quand la classe est créée), et je crée une nouvelle méthode avec le nom d'attribut, où je filtrer son contenu.

Mais en quelque sorte, quand je l'appelle « # {nom_attribut} _without_filter » il appelle ma nouvelle méthode (je pense parce que le alias_attribute une certaine façon), et le programme entre dans une boucle de la pile.

Im essayant de renommer cet attribut, pour que je puisse utiliser son nom pour une méthode ...

Quelqu'un peut-il me s'il vous plaît éclairer à ce sujet.

Était-ce utile?

La solution

Il y a une différence entre alias_method et alias_attribute. alias_method fait en fait un copier de l'ancienne méthode, alors que alias_attribute juste définit de nouvelles méthodes, appeler anciens .

Notez que model.attribute et méthodes model.attribute= dans ActiveRecord appellent simplement read_attribute et write_attribute , vous pouvez toujours accéder à votre attribut, même si vous le remplacez ou de getter setter:

  define_method "#{attribute_name}" do
    filter_words(self.read_attribute(attribute_name))
  end
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top