Gibt es eine Möglichkeit, den Operator in Ruby zu überschreiben?

8

Ich versuche etwas zu tun wie:

%Vor%

Aber ich brauche Benutzer, um eine Methode für ein Konto zu sein. Also habe ich Dinge ausprobiert wie:

%Vor%

Aber ich hatte damit kein Glück. Ist das in Ruby überhaupt möglich? Ich würde das annehmen, weil die ActiveRecord-Beziehungen in Rails so zu funktionieren scheinen.

    
John Baker 02.03.2012, 16:31
quelle

6 Antworten

8

Überprüfen Sie diese Antwort: Rails: Überschreiben der ActiveRecord-Verknüpfungsmethode

[Dieser Code ist vollständig von der anderen Antwort, hier für zukünftige Suchende]

%Vor%     
Jesse Wolgamott 02.03.2012 16:55
quelle
5

Es scheint so, als würden Sie Ihr tatsächliches Problem nicht beschreiben, sondern Ihre Frage beantworten - ja, Sie können den Operator << überschreiben:

%Vor%     
muffinista 02.03.2012 16:37
quelle
1

In diesem Fall ist es der << deiner Klasse von dir User. So kann ein Array oder ein AssociationProxy sein.

Am einfachsten ist es, eine neue Methode zu erstellen, um das zu tun, was Sie wollen.

Sie können die Methode stattdessen durch eine Instanz überschreiben.

%Vor%

Aber Sie müssen das immer tun, bevor Sie nach & lt; & lt;

hinzufügen     
shingara 02.03.2012 16:36
quelle
1

Ich nehme an, Sie haben ein Modell wie folgt:

%Vor%

Um Account#users<< zu überschreiben, müssen Sie es in einem Block definieren, den Sie an has_and_belongs_to_many übergeben:

%Vor%

Sie können auf das entsprechende Objekt Account zugreifen, indem Sie auf proxy_association.owner :

verweisen %Vor%

Um das ursprüngliche Account#users<< aufzurufen, rufen Sie Account#users.concat :

auf %Vor%

Weitere Informationen finden Sie auf dieser Seite: Verknüpfungserweiterungen - ActiveRecord

    
Miscreant 18.12.2012 21:47
quelle
0

users würde ein Objekt zurückgeben, das << operator wie Array , IO , String oder einen von Ihnen erstellten Typ überschrieben hat. Sie überschreiben so:

%Vor%     
Linuxios 02.03.2012 16:37
quelle
0

Wenn Sie beim Hinzufügen eines User zur users -Auflistung eine Aktion ausführen möchten, können Sie Assoziationsrückrufe anstatt << zu übersteuern (da es viele Möglichkeiten gibt, ein Objekt zu einer Assoziation hinzuzufügen).

%Vor%     
Harish Shetty 03.03.2012 02:19
quelle

Tags und Links