Scaffold: gerando um recurso e entendendo cada arquivo
Um comando gera model, migration, controller e rotas — entender o que cada arquivo faz é o objetivo.
scaffold é o gerador mais completo do Rails: um comando cria model, migration, controller, rotas e (em app tradicional) views. Numa API, view não entra — mas todo o resto sim. O objetivo aqui não é decorar o comando, é entender pra que serve cada arquivo que ele cria.
rails generate scaffold Produto nome:string preco:decimal --api--api pede a variante pra API (sem view HTML). nome:string preco:decimal já define as colunas da tabela — Rails escreve a migration a partir disso.
O que cada arquivo gerado faz
class CreateProdutos < ActiveRecord::Migration[7.1]
def change
create_table :produtos do |t|
t.string :nome
t.decimal :preco
t.timestamps # cria created_at e updated_at sozinho
end
end
endclass Produto < ApplicationRecord
endUm model Rails começa vazio — herdar de ApplicationRecord já dá acesso a todo CRUD (Produto.all, Produto.find(1), Produto.create(...)) sem escrever SQL nenhum. Validação e associação entram depois, na próxima lição.
Rails.application.routes.draw do
resources :produtos # gera as 7 rotas REST padrão de uma vez (próxima lição)
endclass ProdutosController < ApplicationController
def index
render json: Produto.all
end
def show
render json: Produto.find(params[:id])
end
def create
produto = Produto.create(produto_params)
render json: produto, status: :created
end
private
def produto_params
params.require(:produto).permit(:nome, :preco)
end
endproduto_params é o strong parameters do Rails: exige que o JSON venha aninhado sob produto e permite explicitamente só nome/preco — qualquer outro campo enviado (tipo um admin: true malicioso) é silenciosamente descartado. Isso não é detalhe cosmético: é a primeira linha de defesa contra mass assignment.
Exercício
Rode rails generate scaffold Categoria nome:string --api mentalmente: quais 4 arquivos seriam criados, e o que cada um teria de diferente em relação ao exemplo de Produto acima?