Associations
No Nerdify, o bloco associations dentro do modelo serve para definir os relacionamentos entre diferentes entidades da aplicação. Esses relacionamentos seguem a convenção e sintaxe padrão do Rails e do Mongoid, permitindo uma transição suave para quem já está familiarizado com o ecossistema Ruby on Rails.
🔍 Por que usar associations
- Permite mapear os relacionamentos entre os modelos
- Garante que os dados sejam conectados corretamente no banco
- Serve como base para campos do tipo select, checkbox, radio ou embeds
- Ajuda o Nerdify a entender como popular, exibir e salvar dados complexos automaticamente
🧱 Sintaxe
A sintaxe segue os padrões do Mongoid, e aceita opções como:
associations do
belongs_to :company
has_many :customers
has_one :profile
has_and_belongs_to_many :roles
end
Você pode usar as mesmas opções aceitas pelas macros padrão, como inverse_of, class_name, optional, dependent, entre outras. Para referência completa:
👉 Guia de Associações do Rails
🧠 Integração com Campos (fields)
Ao declarar uma associação como belongs_to :company, o Nerdify automaticamente integra essa informação com campos que utilizem o tipo select, checkbox, radio.
📌 Essa integração é feita quando um
fieldutiliza o mesmo nome do relacionamento, e define a opçãocollection:com o caminho da API que retorna as opções.
✅ Exemplo prático
associations do
belongs_to :company
end
fieldset :dados do
field :company, type: :select, collection: "/companies", label: :name
end
Neste exemplo:
- O
selectserá automaticamente preenchido com o nome da empresa - O campo
company_idreceberá oidda empresa selecionada - O Nerdify armazenará em cache o valor selecionado (label) como
company_id_label, evitando consultas desnecessárias
⚠️ Quando usado
multiple: truenofield, o relacionamento correspondente deve serhas_and_belongs_to_many, permitindo múltiplos valores vinculados corretamente.
✅ Exemplo prático
associations do
has_and_belongs_to_many :companies
end
fieldset :dados do
field :companies, type: :select, collection: "/companies", label: :name, multiple: true
end
🧩 Integração com Embeds (include: true)
O Nerdify permite criar formulários embedados de modelos relacionados com base na associação. Isso acontece quando você:
- Define um
embedcom o mesmo nome da associação - Usa
include: true
✅ Exemplo prático
associations do
belongs_to :customer
end
fieldset :enderecos do
embed :customer, include: true
end
Neste exemplo:
- O Nerdify irá carregar o modelo
Customere usá-lo como base para montar os campos do formulário embedado - O nome da associação (
:customer) será usado para construir o parâmetro de envio comocustomer_attributes
✅ Quando se usa
include: true, não é necessário configurarautosave,accepts_nested_attributes_forou similares do Rails e Mongoid. Tudo é tratado automaticamente pelo blocoembedno Nerdify sem precisar detalhar isso na associação.
🔗 Veja mais sobre isso na seção específica sobre embeds.
📎 Consultando as associations
Você pode consultar todas as associations definidas em tempo de execução com:
Customer.nerdify.associations
Isso retorna um array de OpenStruct com todos os parâmetros da action:
action = Customer.nerdify.associations.first
puts association.association # => "customer"
puts association.association_model # => "Customer"
puts association.type # => "belongs_to"
puts association.options[:optional] # => true
As actions são o elo entre modelo, template, controlador e frontend — definindo comportamento, acesso e estrutura de forma automatizada e elegante no Nerdify. ✅
📌 Resumo
- As
associationsseguem a convenção do Rails/Mongoid - Integram com campos para facilitar entrada e exibição de dados relacionados
- Servem de base para formulários embedados com
include: true - Otimizam queries com caching automático de labels em campos do tipo
select,checkboxeradio.
Com o uso correto de associations, seu modelo se torna muito mais poderoso, expressivo e conectado — tanto com o banco de dados quanto com os componentes visuais do Nerdify. 🚀