mongo_orm nom personnalisé pour la collection

mongo_orm déterminera automatiquement le nom de votre collection en utilisant le nom du module et de la classe, et en ajoutant un "s".

Dans les cas où vous souhaitez nommer votre collection, vous pouvez simplement le faire :

classe PapiTest < Mongo::ORM::Document
     collection_name "Buster"
     test sur le terrain : String
fin

get "/" do
     pt = PapiTest.new
     pt.test = "Je veux ton sexe"
     pt.save !
   "Bonjour le monde !"
fin

Kemal.run

Dans mon exemple, la collection s'appellera Buster.

En interne, ceci est réalisé par une macro qui ressemble à ceci :

# spécifier le nom de la collection à utiliser, sinon le nom du modèle sera utilisé.

macro collection_name(name)

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

fin

Il est important de comprendre que le développement se fait ici dans le contexte d'une macro ! Par conséquent, .id n'est PAS une variable de classe ou une méthode que vous devez passer, mais une fonction spéciale dans le contexte de la macro qui renverra un MacroID pour le contenu de la chaîne.

Reportez-vous à cette documentation : https://crystal-lang.org/api/0.27.2/Crystal/Macros/MacroId.html

La fonction belongs_to est réalisée de manière similaire. Il vous permet de créer des relations entre les documents / collections.

belongs_to :user, class_name : FictitiousModule::FictiticiousClass

est réalisé en interne comme une macro :

macro belongs_to(nom_modèle, nom_classe=nil)

  champ {{class_name ? class_name.id.underscore.gsub(/::/,"_") : model_name.id}}_id : BSON::ObjectId

  (...)

ici class_name : dans l'appel de la macro originale fait référence à la deuxième variable qui est nulle par défaut. La macro vérifie si elle n'est pas nil, et choisit ce qu'il faut utiliser.