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