es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

WashOut::Soap parámetros faltantes al actualizar a Rails 6 actionpack 6.

Utilizo Washout::SOAP en mi controlador de Ruby on Rails, que tiene una acción soap_action como esta:

soap_action 'nombre_de_accion',
              :args   => {:a => :string, :b => :string},
              :return => {'tns:result' => StringArray},
              :response_tag => 'response'

def nombre_de_accion
  params
  # hacer algo
end

En mi prueba de especificación, tengo esto:

Savon.client(wsdl: wsdl_url).call(:nombre_de_accion, message: {a: 'A', b:'B'})

Esto funciona cuando uso Rails 5 y actionpack 5. Sin embargo, cuando cambio a Rails 6 y actionpack 6, params[:a] y params[:b] se vuelven nulos.

¿Alguien sabe qué está mal? ¿Y cómo solucionar esto?

Gracias.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Posible error con Rails 6 y ActionPack 6

    Podría haber un error posible con Rails 6 y ActionPack 6 donde params[:a] y params[:b] se vuelven nulos. Esto ocurre al usar Washout::SOAP en el controlador Ruby on Rails y Savon.client en la prueba de especificación.

    Solución posible

    Para solucionar el problema, intenta agregar el siguiente código al controlador Ruby on Rails:

    @_params = WashOut::Dispatcher.deep_symbolize(params)
    

    Esto convertirá el hash params en un hash simbolizado. Luego, modifica el método action_name para usar @_params en lugar de params.

    soap_action 'action_name',
                  :args   => {:a => :string, :b => :string},
                  :return => {'tns:result' => StringArray},
                  :response_tag => 'response'
    
    def action_name
      @_params
      # hacer algo
    end
    

    Intenta ejecutar la prueba nuevamente con Savon.client y debería funcionar correctamente.

    ¡Espero que esto ayude!

Comments are closed.