Questa è una vecchia domanda, ma ho riscontrato lo stesso problema di recente, quindi ho deciso di condividere. Anche se, voglio notare, che questa non è una soluzione per sessione, ma per modello.
Come ho capito, ci sono due modi per renderlo possibile:
1. Ridefinire readonly?
Se guardi il codice Mongoid, vedrai che tutte le funzioni che salvano, eliminano o aggiornano, chiamano readonly?
per verificare se il modello è di sola lettura. Non è realmente documentato e presenta uno svantaggio:crea e crea! sono consentiti su questo modello (tuttavia, le distruzioni, gli aggiornamenti, i salvataggi non verranno eseguiti).
private
def readonly?
true
end
2. Una richiamata personalizzata
Oltre al metodo precedente, puoi aggiungere callback per assicurarti che anche le creazioni non passino:
before_create :readonly_secret
private
def readonly?
true
end
def readonly_secret
raise Mongoid::Errors::ReadonlyDocument, self.class if readonly?
end
In sostanza, puoi sbarazzarti di readonly?
metodo del tutto e aggiungi altri callback come before_save
, before_destroy
, before_update
, before_create
Manipolare la "prontezza"
se senti la necessità di manipolare lo stato di sola lettura da un codice di runtime, puoi definire un attributo per la classe del tuo modello:
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