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?
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.
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.
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 .
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%Tags und Links ruby ruby-on-rails-3 mongoid ruby-on-rails