1

我有一个系统,其 Web UI 可以正常工作,API 端点位于 /receiver_api。用户发送由 Mailgun 解析的电子邮件,然后 Mailgun 将 POST 提交到此端点。根据这些参数的值(创建新帖子、创建新回复、添加订阅、删除订阅等),我们可能想要采取很多可能的操作,并且在编写处理程序时感觉就像我们在做又是一种路由!

因此,我们想根据 POST 参数选择将请求定向到的控制器。我们现在将 /receiver_api 指向一个 ReceiverApi#receiver 控制器/方法,它继承自 ApplicationController。它目前有效地将请求路由到其他不继承自 ApplicationController 的“假”控制器(因为从一个 Rails 控制器重定向到另一个控制器不起作用)。我们希望最终路由到 Rails 控制器,这样我们就可以使用 before_filter 和其中的所有其他魔法。

无论如何,一种可能会浮现在脑海中的是 routes.rb 中的一个方法,它访问 POST 参数并返回应该被定向到的 Rails 控制器/方法。2个问题:

  1. 这可能吗?您可以访问 routes.rb 中的 POST 参数吗?

  2. 有没有更好的方法来做到这一点?我们曾考虑过将级别提升到 Rack,并且可能会在某个时候这样做,但如果这需要一段时间,我们宁愿把一些东西拿出来。

谢谢!

4

1 回答 1

1

根据参数选择控制器并不是一件好事。

更好的选择是将代码(在那些假控制器中)重构为模型中的方法,并根据控制器中的参数调用模型方法。

您无法访问您的 routes.rb 中的参数,因为它在初始化时运行。

如果你真的想根据参数调用控制器,有一种方法可以做到这一点,即重定向到另一个控制器。这在http://www.railsonwave.com/2008/10/25/how-to-call-a-controller-s-action-from-a-different-controller/ [错误链接] 中有解释,但请注意这在很大程度上是一种黑客行为。

于 2012-08-17T07:42:46.440 回答