mongo_orm nome personalizzato per la collezione

mongo_orm determinerà automaticamente il nome della vostra collezione usando il nome del modulo e della classe e aggiungendo una "s".

Nei casi in cui volete dare un nome alla vostra collezione, potete semplicemente fare così:

classe PapiTest < Mongo::ORM::Document
     nome_della_raccolta "Buster"
     test di campo : Stringa
fine

ottenere "/" fare
     pt = PapiTest.new
     pt.test = "Voglio il tuo sesso"
     pt.save!
   "Ciao mondo!"
fine

Kemal.run

Nel mio esempio, la collezione sarà chiamata Buster.

Internamente, questo è realizzato da una macro che assomiglia a questa:

# specifica il nome della collezione da usare altrimenti userà il nome del modello

macro collezione_nome(nome)

    {% SETTINGS[:collection_name] = name.id %}

fine

È importante capire che qui lo sviluppo è fatto nel contesto di una macro! Quindi .id NON è una variabile di classe/metodo che devi passare, ma una funzione speciale nel contesto della macro che restituirà un MacroID per il contenuto della stringa.

Fare riferimento a questa documentazione: https://crystal-lang.org/api/0.27.2/Crystal/Macros/MacroId.html

belongs_to è realizzato in modo simile. Permette di creare relazioni tra documenti/collezioni.

belongs_to :user, class_name: FictitiousModule::FictiticiousClass

è realizzato internamente come una macro:

macro belongs_to(nome_modello, nome_classe=nil)

  campo {{nome_classe ? nome_classe.id.underscore.gsub(/::/,"_") : nome_modello.id}}_id : BSON::ObjectId

  (...)

Qui class_name: nella chiamata originale della macro si riferisce alla seconda variabile che è nil per default. La macro controlla se non è nil e sceglie cosa usare.