| Class | ActionController::Metal |
| In: |
lib/action_controller/metal.rb
|
| Parent: | AbstractController::Base |
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:
match 'hello', :to => HelloController.action(:index)
The action method returns a valid Rack application for the \Rails router to dispatch to.
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 ActionController::Rendering
append_view_path "#{Rails.root}/app/views"
def index
render "hello/index"
end
end
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
You can refer to the modules included in ActionController::Base to see other features you can bring into your metal controller.
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.
Basic implementations for content_type=, location=, and headers are provided to reduce the dependency on the RackDelegation module in Renderer and Redirector.