sql >> Databasteknik >  >> NoSQL >> MongoDB

Gör mongoid-session skrivskyddad

Det är en gammal fråga, men jag stötte på samma problem nyligen, så jag bestämde mig för att dela med mig. Även om jag vill notera att det här inte är en lösning per säsong, utan en per modell.

Som jag kom på finns det två sätt att göra det möjligt:

1. Omdefiniera readonly?

Om du tittar igenom Mongoid-koden ser du att alla funktioner som sparar, raderar eller uppdaterar, ringer readonly? för att kontrollera om modellen är skrivskyddad. Inte riktigt dokumenterat och har en nackdel - skapa och skapa! är tillåtna på den här modellen (förstörer, uppdateringar, sparar körs dock inte).

private

def readonly?
  true
end

2. En anpassad återuppringning

Utöver den tidigare metoden kan du lägga till callback(s) för att säkerställa att inte ens skapade passerar igenom:

before_create :readonly_secret

private

def readonly?
  true
end

def readonly_secret
  raise Mongoid::Errors::ReadonlyDocument, self.class if readonly?
end

I huvudsak kan du bli av med readonly? metod helt och hållet, och lägg till andra återuppringningar som before_save , before_destroy , before_update , before_create

Manipulera "readonliness"

om du känner ett behov av att manipulera skrivskyddat tillstånd från en körtidskod, kan du definiera ett attribut för din modells klass:

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. så din HBase är trasig

  2. Batchuppsättningsdata från Dictionary till Redis

  3. Behöver summera från arrayobjektets värde i mongodb

  4. Azure CosmosDB med Mongo-drivrutiner:Få Count Utan att hämta alla dokument baserade på element i underdokument i C#.Net