Seis views .json.jbuilder, já em uso neste app
Um model despejado cru
Catalog::Course.find_by(slug: "computer-architecture").to_json
Num banco de desenvolvimento, isso retorna:
{"id":1,"active":true,"category_id":12,"created_at":"2026-09-19T21:42:45.504Z","description":"Understanding CPU, RAM, and disk in a Ruby context.","level":"intern","position":1,"slug":"computer-architecture","title":"Computer architecture","updated_at":"2026-09-19T22:32:26.280Z","title_en":"Computer architecture","title_pt_br":"Arquitetura de computadores","description_en":"Understanding CPU, RAM, and disk in a Ruby context.","description_pt_br":"Entendendo CPU, RAM e disco no contexto Ruby."}
Catorze chaves: toda coluna de courses, inclusive category_id, mais as duas variantes de idioma de title e description, na ordem em que o ActiveRecord as produz. Compare com o que a view catalog/search/index.json.jbuilder deste app devolve para o mesmo curso, como um resultado de busca entre vários: {"title":"Computer architecture","url":"/catalog/courses/computer-architecture","type":"course","level":"intern"}. Quatro chaves, escolhidas de propósito, na ordem em que o arquivo as escreve. A mesma linha, dois formatos de JSON diferentes: essa diferença é o assunto deste curso.
Instalado, já no Gemfile
# Gemfile, linha 20
gem "jbuilder"
O Gemfile.lock fixa em jbuilder (2.15.1), e este app tem seis views que o usam. Duas são lidas por inteiro neste curso: app/views/execution/api/v1/sandbox/execute.json.jbuilder e app/views/catalog/search/index.json.jbuilder. As outras quatro, o submissions/show.json.jbuilder do sandbox e três views da API de parceiros em app/views/partners/api/v1/, aparecem onde mostram uma forma que as duas primeiras não usam. Um arquivo .json.jbuilder é uma view, achada e renderizada como um .html.erb (a mesma convenção de pasta app/views/<controller>/<action>). Em vez de montar uma string de HTML, ela monta um valor JSON por um objeto que toda view Jbuilder recebe, chamado json.
O que é o json
json é uma instância de JbuilderTemplate, uma subclasse da classe Jbuilder da gem, criada antes de o código do seu template rodar. Cada chamada de método nele, como json.status "pending" ou json.array! ..., ou define uma chave num objeto JSON em montagem ou transforma tudo num array JSON. A sintaxe não é Ruby especial: são chamadas de método comuns num objeto comum, e é por isso que as próximas aulas conseguem ler os arquivos deste app linha a linha e explicar o que cada chamada faz.
O que este curso cobre
Sete aulas, cada uma conferida nos arquivos deste app, no banco dele ou no código-fonte instalado do Jbuilder (jbuilder-2.15.1, achado com bundle show jbuilder). A aula 2 trata do setter implícito por trás de json.status "pending". A aula 3 trata do json.array!, pela mistura de cursos e aulas da view de busca. A aula 4 trata do json.partial!, instalado e documentado, e de por que nenhuma view deste app precisa dele ainda. A aula 5 trata de como o Rails acha um arquivo .json.jbuilder para uma requisição. A aula 6 mede a diferença entre montar JSON assim e chamar .to_json ou .as_json num model.
Continue com a aula 2
json.key value é set!, na view do sandbox
Mostra como chamadas implícitas como json.status chegam ao set! pelo method_missing na view execute do sandbox.
Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.