2011-06-02 91 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 
相關問題