如何在 Rails 上的 Ruby 中添加自定义路由、控制器和操作?
How to add a custom route, controller, and action in Ruby on Rails?
我在 Rails 和 ActiveAdmin 应用程序上有一个 Ruby。除了添加和注册一些模型之外,我基本上没有更改任何默认配置。
我想使用类似 GET /heartbeat
的路由启用我的应用程序,并使用简单的字符串响应 client/user。我想知道如何执行以下步骤:
- 向我的
routes.rb
文件添加自定义路由。
- 在
app/controllers
路径下添加自定义控制器。
- 执行自定义操作并在没有任何视图的情况下直接响应用户。
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 响应渲染堆栈 所以应该比公认的解决方案快得多。
我在 Rails 和 ActiveAdmin 应用程序上有一个 Ruby。除了添加和注册一些模型之外,我基本上没有更改任何默认配置。
我想使用类似 GET /heartbeat
的路由启用我的应用程序,并使用简单的字符串响应 client/user。我想知道如何执行以下步骤:
- 向我的
routes.rb
文件添加自定义路由。 - 在
app/controllers
路径下添加自定义控制器。 - 执行自定义操作并在没有任何视图的情况下直接响应用户。
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 响应渲染堆栈 所以应该比公认的解决方案快得多。