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í?
ruby-on-rails-4
Erik Trautman
fuente
fuente
permit
pero norequire
.Respuestas:
El
params
en un controlador se ve como un Hash, pero en realidad es una instancia deActionController::Parameters
, que proporciona varios métodos comorequire
ypermit
.El
require
método garantiza que esté presente un parámetro específico y, si no se proporciona, elrequire
método arroja un error. Devuelve una instancia deActionController::Parameters
para la clave pasadarequire
.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.
fuente
true
elpermitted?
método. Por defecto, una instancia de laActionController::Parameters
clase volveráfalse
parapermitted?
respondertrue
apermitted?
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
derequire
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:
fuente
not okay
visualizan el tercer y cuarto ejemplo?