MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Направете mongoid сесия само за четене

Това е стар въпрос, но наскоро срещнах същия проблем, така че реших да споделя. Въпреки че искам да отбележа, че това не е решение за сесия, а за модел.

Както разбрах, има два начина да направите това възможно:

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. не може да прави заявки през ListField(EmbeddedDocumentField)

  2. Как да попълня поддокументите, върнати след обобщено търсене в mongodb?

  3. Възможно ли е да се получат полетата в реда на проекция в Aggregation Frameworks mongo

  4. Указване на име на колекция с MongoEngine

  5. Единичен тест с Mongoose