ActionController::Metal
is the simplest possible controller,
providing a valid Rack interface without the
additional niceties provided by ActionController::Base
.
A sample metal controller might look like this:
class HelloController < ActionController::Metal def index self.response_body = "Hello World!" end end
And then to route requests to your metal controller, you would add
something like this to config/routes.rb
:
get 'hello', to: HelloController.action(:index)
The action
method returns a valid Rack application for the Rails router to dispatch
to.
Rendering Helpers
ActionController::Metal
by default provides no utilities for
rendering views, partials, or other responses aside from explicitly calling
of response_body=
, content_type=
, and
status=
. To add the render helpers you're used to having
in a normal controller, you can do the following:
class HelloController < ActionController::Metal include AbstractController::Rendering include ActionView::Layouts append_view_path "#{Rails.root}/app/views" def index render "hello/index" end end
Redirection Helpers
To add redirection helpers to your metal controller, do the following:
class HelloController < ActionController::Metal include ActionController::Redirecting include Rails.application.routes.url_helpers def index redirect_to root_url end end
Other Helpers
You can refer to the modules included in
ActionController::Base
to see other features you can bring
into your metal controller.