Utilizando Jbuilder no Rails - Parte 1

Isadora Rocha - Sep 17 - - Dev Community

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!

. .
Terabox Video Player