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
Endeget "/" do
pt = PapiTest.new
pt.test = "Ich will dein Geschlecht"
pt.save!
"Hallo Welt!"
EndeKemal.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.