@drawoharaio ❤️ questo! << clicca su di me 🐛 🫖 🧚
/marshal-mongoid-object-like-butter
pubblicato il: 2013-03-01

Inserire i tuoi modelli nella cache o serializzarli per altri motivi non dovrebbe essere doloroso. Purtroppo, con la maggior parte degli ORM, è così, poiché hanno una strategia di marshalling scarsa di default. Tuttavia, questo è facile da risolvere: la chiave sta nel capire che ogni ORM sa già come prendere un hash di informazioni dal database e istanziare un'istanza completa. Sapendo questo, possiamo facilmente rendere qualsiasi modello serializzarsi come burro.


#! /usr/bin/env ruby
# alcuni modelli hanno stronzate che non sopravvivono a un ciclo di marshalling
#
  class Modello
    include Mongoid::Documento
    def inizializza(*args, &blocco)
      super
    assicura
      @errore = Classe.nuovo, apri(__FILE__)
    fine
  fine
# quindi fallirà
#
  inizia
    p Marshal.carica(Marshal.scarica(Modello.crea))
  salva Oggetto => o
    avverti "#{ o.messaggio } (#{ o.classe })"
  fine
# ma i modelli mongoid hanno semplicemente bisogno di un hash di informazioni dal driver mongo
# per vivificarsi completamente... quindi è tutto ciò che dobbiamo persistere quando
# viene marshallato. Questo rende il caricamento dai dati marshallati *proprio come* il caricamento dal
# db.
#
# se chiedi a me questo dovrebbe essere il comportamento predefinito!
#
# hrm - sono nel nucleo di mongoid... @durran, cosa ne pensi?
#
# a proposito - questo funziona benissimo anche con active_record...
#
  class Modello
    def _scarica(*args, &blocco)
      Marshal.scarica(attributi_grezzi, *args, &blocco)
    fine
    def Modello._carica(stringa, *args, &blocco)
      attributi_grezzi = Marshal.carica(stringa, *args, &blocco)
      istanziare(attributi_grezzi)
    fine
  fine
# quindi ora funziona semplicemente (TM)
#
  p Marshal.carica(Marshal.scarica(Modello.crea))
INIZIA {
  richiedi 'rubygems'
  richiedi 'mongoid'
  Mongoid.configura