Parâmetros e segurança
O Rails impede que dados brutos da requisição entrem em atribuição em massa por meio de ActionController::Parameters. As aulas mostram por que passar params bruto ao .new gera ActiveModel::ForbiddenAttributesError e por que a flag permitted? começa em false. Elas tratam do .permit, que devolve um objeto só com as chaves listadas. Depois vem o .require, que entra na chave aninhada do formulário e gera ActionController::ParameterMissing quando ela falta. Controllers reais do projeto mostram o padrão e o params.expect do Rails 8. Um sandbox e o article_params completo fecham o curso.
O que você vai aprender
- ✓Por que params bruto passado ao .new gera ActiveModel::ForbiddenAttributesError
- ✓Como funciona a flag permitted? e por que ela começa em false
- ✓Usar o .permit para manter só as chaves citadas
- ✓Usar o .require para entrar numa chave aninhada e acusar quando ela falta
- ✓Ler o padrão require e permit em controllers reais, além do params.expect
- ✓Conferir o comportamento dos params com segurança no bin/rails console --sandbox
Por que params bruto não consegue alcançar .new
ActiveRecord: criando registros e Controller: ações citaram o article_params como substituto seguro do params bruto, sem montá-lo. Veja o que acontece sem ele:
Ler a aula completa grátis →Currículo
7 aulasPor que params bruto não consegue alcançar .new
O params bruto passado ao .new gera ForbiddenAttributesError porque a flag permitted? começa em false.
.permit: nomeando exatamente o que é permitido
O .permit devolve um objeto permitido só com as chaves listadas, e o .new passa a aceitá-lo.
.require: delimitando para a chave certa
O .require entra na chave aninhada do formulário e gera ParameterMissing quando essa chave está ausente.
O padrão real, verificado ao longo deste projeto
Dois controllers deste projeto usam require e permit, a mesma cadeia que o article_params envolve.
Uma sintaxe nova já chegando: params.expect
Um arquivo do projeto usa params.expect, do Rails 8, que junta require e permit numa chamada.
Testando tudo isso num sandbox
O erro de atributo proibido, a chave descartada e a exceção de chave ausente cabem num console sandbox.
Juntando tudo: article_params, finalmente aberto
A action create e o método privado article_params reúnem todas as ideias do curso num exemplo só.