Por que params bruto não consegue alcançar .new

Prévia grátis 2 min de leitura

A salvaguarda que dois cursos citaram

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:

raw = ActionController::Parameters.new(title: "Hello Rails", admin: true)
Article.new(raw)
# ActiveModel::ForbiddenAttributesError

O Rails gera a exceção na hora. Numa requisição real, o params chega como um objeto ActionController::Parameters, não um Hash Ruby comum, e esse objeto começa sem poder ser usado em atribuição em massa.

permitted? é a flag

raw.permitted?
# => false

Todo objeto ActionController::Parameters tem essa flag. O .new a confere e recusa quando ela é false. A flag é uma chave explícita que sempre começa desligada; o Rails não tenta adivinhar se um hash parece perigoso.

Por que o padrão é "não"

O params guarda o que a requisição trouxe, o que pode incluir mais que os campos visíveis do formulário, a preocupação que ActiveRecord: criando registros levantou. Com permitted? começando em false, quem desenvolve precisa decidir o que passa (aulas 2 e 3) em vez de confiar em tudo por acidente.

Pontos-chave

  • params bruto passado ao .new gera ActiveModel::ForbiddenAttributesError.
  • permitted? é false por padrão, e o .new o confere.
  • O padrão false obriga uma escolha deliberada do que é permitido.
Aula 1 de 7 · grátis

Continue com a aula 2

.permit: nomeando exatamente o que é permitido

O .permit devolve um objeto permitido só com as chaves listadas, e o .new passa a aceitá-lo.

Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.

Digite para buscar...