Todos os exemplos de parâmetros fortes nos documentos do Rails 4 usam
params.require(:person).permit(:name, :age)
Alguém poderia agradar desconstruir e explicar o que está ocorrendo com require
e permit
aqui?
Todos os exemplos de parâmetros fortes nos documentos do Rails 4 usam
params.require(:person).permit(:name, :age)
Alguém poderia agradar desconstruir e explicar o que está ocorrendo com require
e permit
aqui?
Respostas:
O params
em um controlador se parece com um Hash, mas na verdade é uma instância de ActionController::Parameters
, que fornece vários métodos como require
e permit
.
O require
método garante que um parâmetro específico esteja presente e, se não for fornecido, o require
método gera um erro. Retorna uma instância de ActionController::Parameters
para a chave passada require
.
O permit
método retorna uma cópia do objeto de parâmetros, retornando apenas as chaves e valores permitidos. Ao criar um novo modelo ActiveRecord, apenas os atributos permitidos são passados para o modelo.
Parece muito com a lista de desbloqueio anteriormente incluída nos modelos ActiveRecord, mas faz mais sentido que ela esteja no controlador.
true
o permitted?
método. Por padrão, uma instância da ActionController::Parameters
classe retornará false
para permitted?
Respondendo true
a permitted?
, para que o objeto de parâmetro possa ser usado na atribuição em massa; caso contrário, o aplicativo lançará um erro ForbiddenAttributes.
permit
de require
também permitir e incluem os parâmetros necessários no objeto retornado?
Para ser mais preciso, quando você cria, por exemplo. Ao fazê-lo .new(...)
, deve haver :person
hash indicado por exigir e o hash da pessoa só aceitará :name
e :age
indicado por permissão.
Exemplo:
.new(person: { name: "Bhojendra", age: 32 }) // okay
.new(person: { name: "Rauniyar" }) // okay
.new(person: { name: "Bhojendra", other: 'asdf' }) // not okay, other not permitted
.new(person: { full_name: "Bhojendra Rauniyar" }) // not okay, full_name not permitted
.new(detail: { name: "Bhojendra", age: 32 }) // not okay, must be person
not okay
exemplos visualizam?
permit
mas nãorequire
.