alias_attribute und das Erstellen und das Verfahren mit dem ursprünglichen Attributnamen verursacht eine Schleife

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

Frage

versucht Im dynamisch eine Methode Kette in einem Attribute in meinem Modell zu erstellen. Inzwischen habe ich diese Funktion:

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

so erhalte ich eine Zeichenfolge mit dem Attributnamen, alias es für ‚ _without_filter ‘ (alias_method oder alias_method_chain versagt hier, da das Attribut ist nicht da, wenn die Klasse erstellt wird), und ich eine neue Methode mit dem Attributnamen, wo ich seinen Inhalt filtern.

Aber irgendwie, wenn ich rufe „# {attribute_name} _without_filter“ ruft meine neue Methode (ich glaube, weil die alias_attribute einige, wie), und das Programm in einen Stapel Schleife geht.

Im Versuch, dieses Attribut zu benennen, so dass ich seinen Namen für eine Methode verwenden kann ...

Kann jemand bitte mich zu diesem Thema aufklären.

War es hilfreich?

Lösung

Es gibt einen Unterschied zwischen alias_method und alias_attribute. alias_method macht eigentlich eine Kopieren der alten Methode, während alias_attribute nur definiert neue Methoden, die em <> rufen alte .

Beachten Sie, dass model.attribute und model.attribute= Methoden in Active rufen Sie einfach read_attribute und write_attribute , so dass Sie immer Zugriff auf Ihre Attribut, auch wenn Sie es der Getter oder Setter außer Kraft setzen:

  define_method "#{attribute_name}" do
    filter_words(self.read_attribute(attribute_name))
  end
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top