2012-08-17 67 views
1

我有一個系統,它具有一個正常工作的Web UI和一個位於/ receiver_api的API端點。用戶發送由Mailgun解析的電子郵件,Mailgun然後向此端點提交POST。根據這些參數的值(可以創建新帖子,創建新的回覆,添加訂閱,刪除訂閱等),我們可能需要採取很多可能的操作,並且在編寫處理程序時感覺就像我們正在做的那樣一種再次路由!在routes.rb中訪問POST參數

因此,我們想選擇我們根據POST參數指定請求的控制器。我們正在將ReceiverApi#接收器控制器/方法定向到ReceiverApi#receiver_api,該控制器/方法從ApplicationController繼承。它目前有效地將請求路由到不從ApplicationController繼承的其他「假」控制器(因爲從一個Rails控制器重定向到另一個不起作用)。我們希望最終路由到Rails控制器,以便我們可以使用before_filter和其他所有魔法。

無論如何,彈出的一個可能性是routes.rb中的一個方法,它訪問POST params並返回應該引導到的Rails控制器/方法。 2個問題:

  1. 這可能嗎?你可以在routes.rb中訪問POST參數嗎?

  2. 有沒有更好的方法來做到這一點?我們曾想過要升級到Rack,並且可能會在某些時候做到這一點,但如果這需要一段時間,寧願只是從門外取得一些東西。

謝謝!

回答

1

基於參數選擇控制器不是一件好事。

更好的選擇是將您的代碼(在這些假控制器中)重構爲模型中的方法,並根據控制器中的參數調用模型方法。

您無法訪問您的routes.rb中的參數,因爲它在初始化時運行。

如果你真的想調用基於params的控制器,有一種方法,通過重定向到另一個控制器。這在 http://www.railsonwave.com/2008/10/25/how-to-call-a-controller-s-action-from-a-different-controller/ [不良鏈接]中有解釋,但請注意它非常黑客。

+0

感謝您的回覆。我可以問爲什麼調用基於params的控制器是一個壞主意? – RobHeaton 2012-08-17 09:21:37

+1

當您更改Rails的行爲結構時,您違背了慣例,並且從長遠來看,您的代碼難以維護。 – ronalchn 2012-08-17 10:13:31

+1

該鏈接不再去正確的地方 – GreenKiwi 2015-03-03 18:13:45