Det er et gammelt spørgsmål, men jeg mødte det samme problem for nylig, så besluttede at dele det. Selvom jeg vil bemærke, at dette ikke er en per-session-løsning, men en per-model.
Som jeg fandt ud af, er der to måder at gøre det muligt på:
1. Omdefiner readonly?
Hvis du ser gennem Mongoid-koden, vil du se, at alle funktioner, der gemmer, sletter eller opdaterer, kalder readonly?
for at kontrollere, om modellen er skrivebeskyttet. Ikke rigtig dokumenteret og har en ulempe - skab og skab! er tilladt på denne model (ødelægger, opdaterer, gemmer vil dog ikke køre).
private
def readonly?
true
end
2. Et tilpasset tilbagekald
Ud over den tidligere metode kan du tilføje tilbagekald(er) for at sikre, at selv oprettelser ikke passerer igennem:
before_create :readonly_secret
private
def readonly?
true
end
def readonly_secret
raise Mongoid::Errors::ReadonlyDocument, self.class if readonly?
end
I bund og grund kan du slippe af med readonly?
metode sammen, og tilføje andre tilbagekald såsom before_save
, before_destroy
, before_update
, before_create
Manipuler "readonliness"
hvis du føler et behov for at manipulere skrivebeskyttet tilstand fra en runtime-kode, kan du definere en attribut for din models klasse:
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