mongo_orm benutzerdefinierter Name für die Sammlung

mongo_orm bestimmt automatisch den Namen für Ihre Sammlung, indem es den Modul- und Klassennamen verwendet und ein "s" anhängt.

Wenn Sie Ihre Sammlung benennen möchten, können Sie dies einfach tun:

Klasse PapiTest < Mongo::ORM::Dokument
     collection_name "Buster"
     Feldtest : String
Ende

get "/" do
     pt = PapiTest.new
     pt.test = "Ich will dein Geschlecht"
     pt.save!
   "Hallo Welt!"
Ende

Kemal.run

In meinem Beispiel wird die Sammlung folgendermaßen heißen Buster.

Intern wird dies durch ein Makro realisiert, das wie folgt aussieht:

# gibt den zu verwendenden Sammlungsnamen an, ansonsten wird der Name des Modells verwendet

macro sammlung_name(name)

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

Ende

Es ist wichtig zu verstehen, dass die Entwicklung hier im Kontext eines Makros erfolgt! Daher ist .id KEINE Klassenvariable/Methode, die Sie übergeben müssen, sondern eine spezielle Funktion im Makrokontext, die eine MacroID für den Inhalt des Strings zurückgibt.

Siehe diese Dokumentation: https://crystal-lang.org/api/0.27.2/Crystal/Macros/MacroId.html

belongs_to ist auf ähnliche Weise realisiert. Es ermöglicht Ihnen, Beziehungen zwischen Dokumenten / Sammlungen zu erstellen.

belongs_to :user, class_name: FictitiousModule::FictiticiousClass

ist intern als Makro realisiert:

macro belongs_to(model_name, class_name=nil)

  Feld {{Klassenname ? Klassenname.id.underscore.gsub(/::/,"_") : Modellname.id}}_id : BSON::ObjectId

  (...)

Hier bezieht sich class_name: im ursprünglichen Makroaufruf auf die zweite Variable, die standardmäßig gleich Null ist. Das Makro prüft, ob sie nicht Null ist, und wählt aus, was zu verwenden ist.