从中间件渲染 "internal" Rails 控制器

Rendering an "internal" Rails controller from a middleware

我有一个Rails中间件栈,在ActionDispatch外有一块MW。理想情况下,我想通过触发 internal(无法通过通常的 URL 路由访问)的 URL 来使用 ActionDispatch 呈现页面 - 类似于 Devise 呈现的方式这是 "auth failed" 页。最好的办法是只按名称在应用程序中触发一个特定的控制器操作,并且 return 它是渲染结果(甚至没有在路由中)。

执行此操作的标准现代方法是什么?

更新:

def call(env)
  if user_from_env(env).free_accout?
    InterestingPagesController.action(:how_to_signup).call(env)
  else
    @app.call(env)
  end
end

您可以 return 使用 controller.action 将控制器操作作为 Rack 端点,然后使用 endpoint.call() 或端点 [].

调用端点