在routes.rb中访问POST参数

时间:2012-08-17 07:27:12

标签: ruby-on-rails

我的系统具有正常工作的Web UI,以及/ receiver_api的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,并且可能会在某个时候执行此操作,但如果需要一段时间,我宁愿只是把它拿出来。

  3. 谢谢!

1 个答案:

答案 0 :(得分:1)

选择基于params的控制器并不是一件好事。

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

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

如果你真的想基于params调用控制器,有一种方法可以通过重定向到另一个控制器来实现。这在 http://www.railsonwave.com/2008/10/25/how-to-call-a-controller-s-action-from-a-different-controller/ [错误链接]中有解释,但要注意这是一个非常黑客。