2011-06-02 94 views
5

我正在为Rails服务器中的Shipworks实现第三方API,并且Shipworks客户端应用程序正在发布一个action参数和Shipworks特定的语义。如何在控制器中不使用Rails动作参数

但是,Rails路由逻辑会覆盖此参数作为控制器方法的名称。

是否有我可以写入的自定义路由获取该操作参数的值,而不会被覆盖为我的控制器方法的名称?

回答

3

我想通了。 AbstractRequestraw_post方法。

所以,你可以做到这一点来分析原始post数据:

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 

,然后就打电话raw_post_to_hash [:行动]进入原诉讼PARAM或任何其他PARAM。可能有一种更简单的方法。

+2

为什么不使用'Rack :: Utils.parse_nested_query'解析这个字符串? – 2011-06-02 04:41:34

+0

好主意,谢谢 – 2011-06-02 15:35:52

9

今天我陷入了这个陷阱,并在控制器方法中使用了这个解决方案。它的Rails 4.1:

if request.method == "POST" 
    action = request.request_parameters['action'] 
else 
    action = request.query_parameters['action'] 
end 
相关问题