DEV Community

Isadora Rocha
Isadora Rocha

Posted on

1

Utilizando Jbuilder no Rails - Parte 1

Jbuilder

Facilitar a criação de response em formato JSON a partir dos dados de modelos do Rails. Utilizado em APIs para serializar dados e construir documentos JSON complexos de maneira eficiente e legível.
Para os familiarizados de Java, é semelhante ao Serializable.

  • Jbuilder em Rails
json.data! @articles do |article|
  json.extract! article, :id, :title, :content
end
Enter fullscreen mode Exit fullscreen mode
  • Serializable em Java
import java.io.Serializable;

public class Article implements Serializable {
    private int id;
    private String title;
    private String content;

    // Getters e Setters
}
Enter fullscreen mode Exit fullscreen mode

ESSE POST É UMA CONTINUAÇÃO DO REspec Estrutura de Teste em Ruby on Rails


No CONTROLLER, em articles_controller.rb:

ARTICLES CONTROLLER

Foi alterado a linha render JSON - que está comentado na imagem acima - pois o controller não deve fazer duas coisas ao mesmo tempo, quebrando o princípio DRY (Don't Repeat Yourself).

  • ANTES
render json: Article.all, status: :ok
Enter fullscreen mode Exit fullscreen mode

Aqui, o JSON é gerado diretamente no controller, o que faz com que ele cuide de duas coisas: buscar os dados e formatar a resposta, o que quebra o princípio de responsabilidade única.

  • DEPOIS
@articles = Article.all
Enter fullscreen mode Exit fullscreen mode

Agora, o controller apenas busca os dados. A renderização e formatação JSON devem ser tratadas no view.

Na VIEW, em views >> api >> v1 >> articles >> index.json.jbuilder:

OBS: Para funcionar corretamente, é importante deixar o namespace corretamente, dentro das pastas api/v1

VIEW JBUILDER

Bizu para que eu me lembre: json.bloco/nome 'retorna'

Como assim?

Por exemplo, o meu JSON de nome batata, retorna ‘BaTaTa’ no meu body.

POSTMAN


OUTRO EXEMPLO

json.array! @articles do |article|
  json.id article
end
Enter fullscreen mode Exit fullscreen mode

A função array! de JSON de Articles(do controller), faça que cada article retorne um bloco JSON chamado id, e dentro desse bloco, está dizendo que para cada article, o Jbuilderdeve criar uma chave chamada id.

Segue a imagem para melhor visualização:
array articles

RECOMENDAÇÃO
Ao invés de utilizar o json.array!, utilize o json.data para não haver atritos em utilizar outros componentes do jbuilder.

DEFINIR RETORNO SOMENTE DO TITLE DOS ARTICLES PARA O JSON

json.data @articles do |article|
  json.title article.title
end
Enter fullscreen mode Exit fullscreen mode

Segue a imagem para melhor visualização:

title json

CRÉDITOS e RECOMENDAÇÃO: puts_dev

Esse post tem somente a finalidade de consolidar o que aprendi. Qualquer dúvida ou erro que tenha visto, pode me avisar!

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read more →

Top comments (0)

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up