blockiert die Erstellung mehrerer Objekte einer Klasse

7

Wie kann ich das Objekt einer Klasse auf eins beschränken? Meine Klasse sieht so aus:

%Vor%

Ich möchte nur eine einzige Instanz des Sprechers lassen. Eine Möglichkeit wäre, eine Validierung hinzuzufügen, die die Anzahl der bereits vorhandenen Objekte der Speaker-Klasse überprüft. Gibt es eine rubinrote Art, etwas zu tun?

    
Prabesh Shrestha 19.08.2011, 11:25
quelle

6 Antworten

10

Wie wäre es mit dem Modul Singleton ?

    
Frank Schmitt 19.08.2011 11:34
quelle
8

In diesem Fall würde ich eine korrekte Validierung schreiben:

%Vor%     
Sławosz 19.08.2011 11:36
quelle
3

Ich empfehle, eine Klasse / ein Modul zu verwenden, die auf das Speichern von Konfigurationswerten zugeschnitten ist, anstatt sie selbst auf ein Vanilla-ActiveRecord-Modell zu setzen.

Ich benutze eine alte Kopie des rails-settings Plugins mit einigen benutzerdefinierten Änderungen (es funktioniert immer noch gut in Rails 3). Es gibt auch eine Reihe von Variantenangeboten auf Github, also fühlen Sie sich frei zu schauen und wählen Sie.

    
Jeremy Weathers 24.08.2011 21:41
quelle
3

Warum stellen Sie kein Standard-Speaker-Objekt zur Verfügung und stellen Sie keine Controller-Aktionen zum Erstellen oder Löschen bereit?

Scheint die einfachste Lösung bei weitem.

    
Steven Soroka 26.08.2011 06:15
quelle
3

Ich sehe, dass du Mongoid benutzt

Die von Ihnen angeforderte Funktionalität steht nicht zur Verfügung, wenn Mongoid-Validierungen durchgeführt werden.

Daher müssen Sie Ihre eigenen schreiben. before_validation ist ein unterstützter Rückruf und verkettete Speaker.all.count Methoden sind für Ihr Modell verfügbar .

%Vor%

Die beste Vorgehensweise besteht jedoch darin, alle Schlüssel / Wert-Einstellungen in a einzelne Tabelle .

    
Alec Wenzowski 27.08.2011 19:29
quelle
2

Mit dem Singleton-Modul und ein wenig Übertreibung seiner Methoden glaube ich, dass das funktioniert und es Thread-sicher ist (auf Ruby 1.8):

%Vor%     
andersonvom 27.08.2011 20:45
quelle