Todos los ejemplos de parámetros fuertes en Rails 4 docs usan
params.require(:person).permit(:name, :age)
¿Podría alguien deconstruir y explicar qué está ocurriendo con require
y permit
aquí?
Todos los ejemplos de parámetros fuertes en Rails 4 docs usan
params.require(:person).permit(:name, :age)
¿Podría alguien deconstruir y explicar qué está ocurriendo con require
y permit
aquí?
Respuestas:
El params
en un controlador se ve como un Hash, pero en realidad es una instancia de ActionController::Parameters
, que proporciona varios métodos como require
y permit
.
El require
método garantiza que esté presente un parámetro específico y, si no se proporciona, el require
método arroja un error. Devuelve una instancia de ActionController::Parameters
para la clave pasada require
.
El permit
método devuelve una copia del objeto de parámetros, devolviendo solo las claves y valores permitidos. Al crear un nuevo modelo ActiveRecord, solo los atributos permitidos se pasan al modelo.
Se parece mucho a la lista blanca que se incluía anteriormente en los modelos ActiveRecord, pero tiene más sentido que esté en el controlador.
true
el permitted?
método. Por defecto, una instancia de la ActionController::Parameters
clase volverá false
para permitted?
responder true
a permitted?
significa que el objeto de parámetro se puede usar en la asignación masiva; de lo contrario, la aplicación arrojará un error de atributos prohibidos.
permit
de require
permitir también e incluyen los parámetros necesarios en el objeto devuelto?
Para ser más precisos, cuando creas, por ejemplo. haciendo .new(...)
, debe haber un :person
hash indicado por require y el hash de la persona solo aceptará :name
e :age
indicará con un permiso.
Ejemplo:
.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
visualizan el tercer y cuarto ejemplo?
permit
pero norequire
.