Dat is een oude vraag, maar ik kwam onlangs hetzelfde probleem tegen, dus besloot ik het te delen. Hoewel ik wil opmerken dat dit geen oplossing per sessie is, maar per model.
Zoals ik ontdekte, zijn er twee manieren om het mogelijk te maken:
1. Herdefinieer readonly?
Als je door de Mongoid-code kijkt, zie je dat alle functies die opslaan, verwijderen of bijwerken, readonly?
aanroepen. om te controleren of het model alleen-lezen is. Niet echt gedocumenteerd en heeft een nadeel -- creëren en creëren! zijn toegestaan op dit model (vernietigen, bijwerken, opslaan wordt echter niet uitgevoerd).
private
def readonly?
true
end
2. Een aangepaste callback
Naast de vorige methode kun je callback(s) toevoegen om ervoor te zorgen dat zelfs gemaakte creaties niet doorgaan:
before_create :readonly_secret
private
def readonly?
true
end
def readonly_secret
raise Mongoid::Errors::ReadonlyDocument, self.class if readonly?
end
In wezen kunt u zich ontdoen van readonly?
methode samen, en voeg andere callbacks toe, zoals before_save
, before_destroy
, before_update
, before_create
Manipuleer "readonliness"
als u de behoefte voelt om de alleen-lezen-status te manipuleren vanuit een runtime-code, kunt u een attribuut definiëren voor de klasse van uw model:
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