Type:
Class

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:

1
2
3
4
5
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:

1
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:

1
2
3
4
5
6
7
8
9
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:

1
2
3
4
5
6
7
8
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.

performed?
  • References/Ruby on Rails/Rails/Classes/ActionController/ActionController::Metal

performed?() Instance Public methods

2025-01-10 15:47:30
content_type
  • References/Ruby on Rails/Rails/Classes/ActionController/ActionController::Metal

content_type() Instance Public methods

2025-01-10 15:47:30
params
  • References/Ruby on Rails/Rails/Classes/ActionController/ActionController::Metal

params() Instance Public methods

2025-01-10 15:47:30
response_body=
  • References/Ruby on Rails/Rails/Classes/ActionController/ActionController::Metal

response_body=(body) Instance Public methods

2025-01-10 15:47:30
action
  • References/Ruby on Rails/Rails/Classes/ActionController/ActionController::Metal

action(name, klass = ActionDispatch::Request) Class Public methods Returns a

2025-01-10 15:47:30
location
  • References/Ruby on Rails/Rails/Classes/ActionController/ActionController::Metal

location() Instance Public methods

2025-01-10 15:47:30
controller_name
  • References/Ruby on Rails/Rails/Classes/ActionController/ActionController::Metal

controller_name() Class Public methods Returns the last part of the controller's

2025-01-10 15:47:30
env
  • References/Ruby on Rails/Rails/Classes/ActionController/ActionController::Metal

env() Instance Public methods

2025-01-10 15:47:30
content_type=
  • References/Ruby on Rails/Rails/Classes/ActionController/ActionController::Metal

content_type=(type) Instance Public methods Basic implementations for

2025-01-10 15:47:30
call
  • References/Ruby on Rails/Rails/Classes/ActionController/ActionController::Metal

call(env) Class Public methods Makes the controller a

2025-01-10 15:47:30