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.