Action Controller Metal
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
- H
- M
- N
- P
- R
- S
- U
Attributes
[R] | request | The |
[R] | response | The |
Class Public methods
action(name) Link
Returns a Rack endpoint for the given action name.
controller_name() Link
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
dispatch(name, req, res) Link
Direct dispatch to the controller. Instantiates the controller, then executes the action named name
.
make_response!(request) Link
middleware() Link
The middleware stack used by this controller.
By default uses a variation of ActionDispatch::MiddlewareStack
which allows for the following syntax:
class PostsController < ApplicationController
use AuthenticationMiddleware, except: [:index, :show]
end
Read more about Rails middleware stack in the guides.
new() Link
use(...) Link
Pushes the given Rack middleware and its arguments to the bottom of the middleware stack.
Instance Public methods
controller_name() Link
Delegates to the class’s ::controller_name
.
headers Link
Delegates to ActionDispatch::Response#headers
.
params() Link
params=(val) Link
performed?() Link
Tests if render or redirect has already happened.
reset_session() Link
response=(response) Link
Assign the response and mark it as committed. No further processing will occur.
response_body=(body) Link
session Link
The ActionDispatch::Request::Session instance for the current request. See further details in the Active Controller Session guide.