2012-08-17 78 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