【问题标题】:Accessing POST params in routes.rb在 routes.rb 中访问 POST 参数
【发布时间】:2012-08-17 07:27:12
【问题描述】:

我有一个系统,其 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,并且可能会在某个时候这样做,但如果这需要一段时间,我们宁愿只是把一些东西拿出来。

谢谢!

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您的回复。我能问一下为什么基于参数调用控制器是个坏主意吗?
    • 当你改变 Rails 行为的结构时,你违背了约定,从长远来看,这会让你的代码更难维护。
    猜你喜欢
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    • 2015-03-27
    • 2018-08-25
    • 2016-11-08
    • 2017-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多