Das ist eine alte Frage, aber ich bin kürzlich auf das gleiche Problem gestoßen, also habe ich beschlossen, es zu teilen. Allerdings möchte ich anmerken, dass dies keine Lösung pro Sitzung ist, sondern eine pro Modell.
Wie ich herausgefunden habe, gibt es zwei Möglichkeiten, dies zu ermöglichen:
1. Definieren Sie readonly?
neu
Wenn Sie den Mongoid-Code durchsehen, werden Sie sehen, dass alle Funktionen, die speichern, löschen oder aktualisieren, readonly?
aufrufen um zu prüfen, ob das Modell schreibgeschützt ist. Nicht wirklich dokumentiert und hat einen Nachteil - erstellen und erstellen! sind bei diesem Modell erlaubt (Zerstören, Aktualisieren, Speichern werden jedoch nicht ausgeführt).
private
def readonly?
true
end
2. Ein benutzerdefinierter Rückruf
Zusätzlich zur vorherigen Methode können Sie Rückrufe hinzufügen, um sicherzustellen, dass selbst erstellte Elemente nicht durchgelassen werden:
before_create :readonly_secret
private
def readonly?
true
end
def readonly_secret
raise Mongoid::Errors::ReadonlyDocument, self.class if readonly?
end
Im Wesentlichen können Sie readonly?
loswerden -Methode vollständig und fügen Sie andere Callbacks wie before_save
hinzu , before_destroy
, before_update
, before_create
Manipulieren Sie "readonliness"
Wenn Sie den schreibgeschützten Zustand eines Laufzeitcodes manipulieren möchten, können Sie ein Attribut für die Klasse Ihres Modells definieren:
before_create :readonly_secret
class << self
attr_accessor :readonly
end
private
def readonly?
self.class.readonly.nil? ? true : self.class.readonly
end
def readonly_secret
raise Mongoid::Errors::ReadonlyDocument, self.class if readonly?
true
end