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.
- A
- C
- D
- M
- N
- P
- R
- U
Returns a Rack endpoint for the given action name.
Returns the last part of the controller's name, underscored, without
the ending Controller. For instance, PostsController returns
posts. Namespaces are left out, so Admin::PostsController
returns posts as well.
Returns
-
string
Direct dispatch to the controller. Instantiates the controller, then
executes the action named name.
Alias for middleware_stack.
Pushes the given Rack middleware and its arguments to the bottom of the middleware stack.
Delegates to the class' controller_name.
Tests if render or redirect has already happened.