Това е стар въпрос, но наскоро срещнах същия проблем, така че реших да споделя. Въпреки че искам да отбележа, че това не е решение за сесия, а за модел.
Както разбрах, има два начина да направите това възможно:
1. Предефинирайте readonly?
Ако прегледате кода на Mongoid, ще видите, че всички функции, които записват, изтриват или актуализират, извикват readonly?
за да проверите дали моделът е само за четене. Не е наистина документиран и има недостатък - създавайте и създавайте! са разрешени на този модел (унищожавания, актуализации, запазвания обаче няма да се изпълняват).
private
def readonly?
true
end
2. Персонализирано обратно извикване
В допълнение към предишния метод можете да добавите обратно извикване(я), за да сте сигурни, че дори създадените няма да преминат през:
before_create :readonly_secret
private
def readonly?
true
end
def readonly_secret
raise Mongoid::Errors::ReadonlyDocument, self.class if readonly?
end
По същество можете да се отървете от readonly?
метод заедно и добавете други обратни извиквания като before_save
, before_destroy
, before_update
, before_create
Манипулирайте „readonliness“
ако смятате, че трябва да манипулирате състоянието само за четене от код по време на изпълнение, можете да дефинирате атрибут за класа на вашия модел:
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