如何在 Rails 上的 Ruby 中添加自定义路由、控制器和操作?

How to add a custom route, controller, and action in Ruby on Rails?

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

我想使用类似 GET /heartbeat 的路由启用我的应用程序,并使用简单的字符串响应 client/user。我想知道如何执行以下步骤:

  1. 向我的 routes.rb 文件添加自定义路由。
  2. app/controllers 路径下添加自定义控制器。
  3. 执行自定义操作并在没有任何视图的情况下直接响应用户。

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

避免 Rails 渲染堆栈将为您节省一些处理并提高速度。您可以通过一个简单的机架 "application" 在路由器级别执行此操作,return 是一个响应代码:

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

任何响应 call 和 returns [status, headers, body] 的东西都是机架兼容的,因此您可以利用 proc 来做到这一点,就在路由器中。在这种情况下,我们发送一个 204 No Content 应该足以进行心跳,但您始终可以 return 自定义 data/headers.

更新:

我只能想象这被否决了,因为人们不明白为什么这样更好。这是一个快速解释的尝试:

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

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

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