mongo_orm nome personalizado para coleta

mongo_orm determinará automaticamente o nome da sua coleção usando o nome do Módulo e da Classe, e anexando um "s".

Nos casos em que você quer nomear a sua coleção, você pode simplesmente fazer isso:

classe PapiTest < Mongo::ORM::Document
     collection_name "Buster
     teste de campo : Corda
final

obter "/" fazer
     pt = PapiTest.new
     pt.test = "Eu quero o teu sexo".
     pt.save!
   "Olá Mundo!"
final

Kemal.run

No meu exemplo, a coleção será chamada Buster.

Internamente, isto é realizado por uma macro que se parece com isto:

# especifica o nome da colecção a utilizar, caso contrário, utilizará o nome do modelo

macro collection_name(nome)

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

final

É importante entender, que o desenvolvimento é feito no contexto de uma macro aqui! Portanto, .id NÃO é uma variável de classe/método que você tem que passar, mas sim uma função especial no contexto da macro que retornará um MacroID para o conteúdo da string.

Consulte esta documentação: https://crystal-lang.org/api/0.27.2/Crystal/Macros/MacroId.html

belongs_to é realizado de uma forma semelhante. Ele permite criar relações entre Documentos / Colecções.

belongs_to :user, class_name::FictitiousModule::FictiticiousClass

é realizada internamente como uma macro:

macro belongs_to(model_name, class_name=nil)

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

  (…)

aqui class_name: na chamada macro original refere-se à segunda variável que é nula por padrão. A macro verifica se ela não é nula, e escolhe o que usar.