tutorial rails que ejemplos descargar curso caracteristicas ruby-on-rails ruby ruby-on-rails-5

ruby-on-rails - que - ruby on rails tutorial



Cómo resuelvo la advertencia de desactivación "El método to_hash está en desuso y se eliminará en Rails 5.1" (1)

Usar .to_h

Puede llamar a .to_h para obtener un hash seguro, de acuerdo con un comentario en Rails PR .

Ahora hay tres métodos para convertir parámetros a un hash.

  • .to_h significa "si no he llamado .permit , supongo que nada está permitido".
  • .to_unsafe_h significa "si no he llamado .permit , supongo que todo está permitido".
  • .to_hash ahora es ambiguo. Rails lo trata como .to_unsafe_h , pero imprime una advertencia porque no ha indicado explícitamente cuál de las dos opciones anteriores deseaba.

Primero, veamos qué pasa si no has llamado .permit . En una consola de Rails 5.0:

> params = ActionController::Parameters.new({yes: "y", no: "n"}) > params.to_h {} # empty hash because nothing has been permitted > params.to_unsafe_h {"yes"=>"y", "no"=>"n"} # raw values with no warning; you asked for it > params.to_hash # (puts deprecation warning - if you want unsafe values, say so) {"yes"=>"y", "no"=>"n"} # returns raw values

Sin embargo, si llama primero a .permit , no habrá forma de obtener los valores no permitidos.

> params = ActionController::Parameters.new({yes: "y", no: "n"}) > params = params.permit(:yes) # (puts warning about unpermitted parameter :no) > params.to_h {"yes"=>"y"} # permitted values only > params.to_unsafe_h {"yes"=>"y"} # permitted values only > params.to_hash # (puts deprecation warning, but still safe) {"yes"=>"y"} # permitted values only

Asi que:

  1. Siempre use .permit para .permit en la lista blanca los valores que espera
  2. Use .to_h para asegurarse de que si se olvidó del paso 1, nada pasará
  3. Si realmente quiere los valores en bruto, no llame a .permit y llame a .to_unsafe_hash
  4. No llame a .to_hash porque eso ahora es ambiguo

Estoy intentando actualizar a Rails 5, recibo la siguiente advertencia de obsolescencia:

ADVERTENCIA DE DEPRESIÓN: El método to_hash está en desuso y se eliminará en Rails 5.1, ya que ActionController::Parameters ya no hereda de hash. El uso de este comportamiento obsoleto expone a posibles problemas de seguridad. Si continúa utilizando este método, puede estar creando una vulnerabilidad de seguridad en su aplicación que pueda ser explotada. En su lugar, considere usar uno de estos métodos documentados que no están en desuso: http://api.rubyonrails.org/v5.0.0/classes/ActionController/Parameters.html (llamado desde column_header en / Data / Projects / portal / trunk / app /helpers/application_helper.rb:114)

La línea en la que se encuentra la advertencia se ve así:

link_to(name, { action: action_name, params: params.merge({ order: key, page: nil }) }, { title: "Sort by this field", }) +

Como puede ver, no estoy llamando to_hash . Tal vez Rails es. Tal vez alguna otra gema es. No tengo forma de saberlo, porque no pensaron que valiera la pena proporcionar un seguimiento de pila. (Consejo profesional: ¡por lo general vale la pena proporcionar un seguimiento de pila!)

Así que de todos modos, seguí el enlace, planeando encontrar un reemplazo, y el método de merge no parece estar en desuso , pero tal vez simplemente se olvidó de documentar el estado obsoleto, por lo que no puedo estar realmente seguro.

Entonces, ¿qué se supone que debo hacer para aclarar esto?