【问题标题】:How to add a custom route, controller, and action in Ruby on Rails?如何在 Ruby on Rails 中添加自定义路由、控制器和操作?
【发布时间】:2015-11-22 16:34:35
【问题描述】:

我有一个 Ruby on Rails 和 ActiveAdmin 应用程序。除了添加和注册几个模型之外,我基本上没有更改任何默认配置。

我想用GET /heartbeat 之类的路由启用我的应用程序,并用一个简单的字符串响应客户端/用户。我想知道如何执行以下步骤:

  1. 向我的routes.rb 文件添加自定义路由。
  2. 在app/controllers 路径下添加自定义控制器。
  3. 实现自定义操作并直接响应用户,无需任何视图。

【问题讨论】:

    标签: ruby-on-rails ruby activeadmin


    【解决方案1】:

    routes.rb:

    get 'heartbeat' => "custom_controller#heartbeat"
    

    custom_controller.rb:

    class CustomController < ApplicationController
      def heartbeat
        render inline: "Some string to the client/user"
      end
    end
    

    【讨论】:

      【解决方案2】:

      避免使用 Rails 渲染堆栈可以节省一些处理时间并提高速度。您可以通过一个返回响应代码的简单机架“应用程序”在路由器级别执行此操作:

      get 'heartbeat', to: proc { [204, {}, []] }
      

      任何响应 call 并返回 [status, headers, body] 的东西都是机架兼容的,因此您可以利用 proc 来做到这一点,就在路由器中。在这种情况下,我们发送一个204 No Content,这对于心跳来说应该足够了,但您始终可以返回自定义数据/标头。

      更新:

      我只能想象这被否决了,因为人们不明白为什么这会更好。下面是一个简单的解释:

      如果不清楚,则使用此方法根本不需要控制器操作。这是已接受答案的等效解决方案:

      get 'heartbeat', to: proc { [200, {}, ['Some string to the client/user']] }
      

      在 Rails routes.rb 文件中添加该行相当于创建一个新的控制器、视图和路由条目,但有一个关键区别:它避免了 Rails 响应渲染堆栈,所以应该很多比公认的解决方案更快。

      【讨论】:

      • 好吧,我认为这是因为您没有提供完整的答案,因为 OP 也要求自定义控制器和操作
      • 如果你摸索答案,你会意识到这是因为不需要控制器操作,因为它在机架级别呈现并完全避免了轨道堆栈。接受的答案可能会给 OP 他想要的解决方案,但这个答案给了 OP 他需要的东西。它以更好的方式做同样的事情。
      猜你喜欢
      • 1970-01-01
      • 2012-06-19
      • 2011-05-09
      • 1970-01-01
      • 2012-09-05
      • 2012-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多