Por que params bruto não consegue alcançar .new
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
paramsbruto passado ao.newgeraActiveModel::ForbiddenAttributesError.permitted?éfalsepor padrão, e o.newo confere.- O padrão
falseobriga uma escolha deliberada do que é permitido.
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.