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 requirey permitaquí?
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 requirey permitaquí?
Respuestas:
El paramsen un controlador se ve como un Hash, pero en realidad es una instancia de ActionController::Parameters, que proporciona varios métodos como requirey permit.
El requiremétodo garantiza que esté presente un parámetro específico y, si no se proporciona, el requiremétodo arroja un error. Devuelve una instancia de ActionController::Parameterspara la clave pasada require.
El permitmé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.
trueel permitted?método. Por defecto, una instancia de la ActionController::Parametersclase volverá falsepara permitted?responder truea 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.
permitde requirepermitir 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 :personhash indicado por require y el hash de la persona solo aceptará :namee :ageindicará 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 okayvisualizan el tercer y cuarto ejemplo?
permitpero norequire.