2011-06-02 5 views
5

Implemento una API de terceros para Shipworks en un servidor Rails y la aplicación de cliente Shipworks publica un parámetro action con semántica específica de Shipworks.Cómo no usar el parámetro de acción Rails en el controlador

Sin embargo, la lógica de enrutamiento de Rails sobrescribe este parámetro para que sea el nombre del método del controlador.

¿Existe una ruta personalizada que podría escribir para obtener el valor de ese parámetro de acción sin que se sobrescriba como el nombre de mi método de controlador?

Respuesta

3

Me di cuenta. Hay un método raw_post en AbstractRequest.

Así que usted puede hacer esto para analizar los parametros de correos primas:

def raw_post_to_hash 
    request.raw_post.split(/&/).inject({}) do |hash, setting| 
    key, val = setting.split(/=/) 
    hash[key.to_sym] = val 
    hash 
    end 
end 

y luego simplemente llamar raw_post_to_hash [: acción] para acceder al parámetro de acción original o cualquier otro parámetro. Probablemente haya una manera más fácil.

+2

¿Por qué no utilizar 'Rack :: Utils.parse_nested_query' para analizar esta cadena? –

+0

Buena idea, gracias –

9

Caí en esta trampa hoy y vine con esta solución en el método del controlador. Es Rails 4.1:

if request.method == "POST" 
    action = request.request_parameters['action'] 
else 
    action = request.query_parameters['action'] 
end 
Cuestiones relacionadas