Как добавить пользовательский маршрут, контроллер и действие в Ruby on Rails?

У меня есть приложение Ruby on Rails и ActiveAdmin. Я в основном не менял конфигурацию по умолчанию, кроме добавления и регистрации нескольких моделей.

Я хочу включить свое приложение с маршрутом, как GET /heartbeat и ответьте простой строкой клиенту / пользователю. Мне интересно, как я могу сделать следующие шаги:

  1. добавить пользовательский маршрут в my .
  2. добавить пользовательский контроллер под app/controllers путь.
  3. реализовать пользовательский действие и отвечать пользователю напрямую без какого-либо представления.

2 ответов


маршруты.rb:

get 'heartbeat' => "custom_controller#heartbeat"

custom_controller.rb:

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

избегая рельсов рендеринга стека сэкономит вам некоторую обработку и будет быстрее. Вы можете сделать это на уровне маршрутизатора с помощью простого "приложения" стойки, которое возвращает код ответа:

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

все, что отвечает call и возвращает [status, headers, body] совместим с стойкой, поэтому вы можете использовать proc для этого прямо в маршрутизаторе. В этом случае мы отправляем 204 No Content которого должно быть достаточно для сердцебиения, но вы всегда можете вернуть пользовательский данные/заголовки.

обновление:

Я могу только представить, что это было понижено, потому что люди не понимают, почему это лучше. Вот краткая попытка объяснить:

в случае, если это не было ясно, вам не нужно действие контроллера вообще с этим методом. Вот эквивалентное решение принятого ответа:

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

вставить эту линию в рельсы routes.rb файл будет эквивалентен созданию нового контроллера, просмотру и вход в маршрут, с одним ключевым отличием:он избегает стека рендеринга ответа Rails так должно быть гораздо быстрее, чем принимаются решения.