2011-06-02 2 views
5

J'implémente une API tierce pour Shipworks sur un serveur Rails et l'application client Shipworks affiche un paramètre action avec la sémantique spécifique de Shipworks. Toutefois, la logique de routage Rails écrase ce paramètre pour qu'il soit le nom de la méthode du contrôleur.Comment ne pas utiliser le paramètre d'action Rails dans le contrôleur

Y a-t-il un chemin personnalisé que je pourrais écrire pour obtenir la valeur de ce paramètre d'action sans qu'il soit écrasé pour être le nom de ma méthode de contrôleur?

Répondre

3

Je l'ai compris. Il existe une méthode raw_post dans AbstractRequest.

Vous pouvez le faire pour analyser les params post premières:

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 

puis il suffit d'appeler raw_post_to_hash [: l'action] pour accéder au param d'action original ou tout autre param. Il y a probablement un moyen plus facile.

+2

Pourquoi ne pas utiliser 'Rack :: Utils.parse_nested_query' pour analyser cette chaîne? –

+0

Bonne idée, merci –

9

Je suis tombé dans ce piège aujourd'hui et est venu avec cette solution dans la méthode du contrôleur. Il est Rails 4.1:

if request.method == "POST" 
    action = request.request_parameters['action'] 
else 
    action = request.query_parameters['action'] 
end 
Questions connexes