Rails 4 - Parámetros Fuertes - Objetos Anidados
Tengo una pregunta bastante simple. Pero haven't encontrado una solución hasta ahora.
Así que aquí's la cadena JSON que envío al servidor:
{
"name" : "abc",
"groundtruth" : {
"type" : "Point",
"coordinates" : [ 2.4, 6 ]
}
}
Usando el nuevo método de permiso, I've got:
params.require(:measurement).permit(:name, :groundtruth)
Esto no arroja errores, pero la entrada de base de datos creada contiene null
en lugar del valor groundtruth.
Si acabo de establecer
params.require(:measurement).permit!
Todo se guarda como se espera, pero, por supuesto, esto mata a la seguridad proporcionada por los parámetros fuertes.
He encontrado soluciones, como permitir arrays, pero ni un solo ejemplo usando objetos anidados. Esto debe ser posible de alguna manera, ya que debe ser un caso de uso bastante común. Entonces, ¿cómo funciona?
134
3
Por extraño que parezca, cuando se desea permitir atributos anidados, se especifican los atributos del objeto anidado dentro de una matriz. En tu caso sería
Actualizar como sugiere @RafaelOliveira
Por otro lado si quieres anidar varios objetos entonces lo envuelves dentro de un hash... así
En realidad, Rails tiene bastante buena documentación al respecto: http://api.rubyonrails.org/classes/ActionController/Parameters.html#method-i-permit.
Para más información, puedes consultar la implementación de
permit
ystrong_parameters
: https://github.com/rails/rails/blob/master/actionpack/lib/action_controller/metal/strong_parameters.rb#L246-L247Esta sugerencia me resultó útil en mi caso:
Mira este link del comentario de Xavier's en github.
Este enfoque incluye en la lista blanca todo el objeto params[:measurement][:groundtruth].
Usando los atributos de las preguntas originales:
Permitir un objeto anidado: