- 1.0.0 (0)
- 1.1.6 (18)
- 1.2.6 (0)
- 2.0.3 (0)
- 2.1.0 (0)
- 2.2.1 (0)
- 2.3.8
- 3.0.0
- 3.0.9
- 3.1.0
- 3.2.1
- 3.2.8
- 3.2.13
- 4.0.2
- 4.1.8
- 4.2.1
- 4.2.7
- 4.2.9
- 5.0.0.1
- 5.1.7
- 5.2.3
- 6.0.0
- 6.1.3.1
- 6.1.7.7
- 7.0.0
- 7.1.3.2
- 7.1.3.4
- What's this?
Components allow you to call other actions for their rendered response while executing another action. You can either delegate the entire response rendering or you can mix a partial response in with your other content.
class WeblogController < ActionController::Base # Performs a method and then lets hello_world output its render def delegate_action do_other_stuff_before_hello_world render_component :controller => "greeter", :action => "hello_world", :params => { :person => "david" } end end class GreeterController < ActionController::Base def hello_world render :text => "#{params[:person]} says, Hello World!" end end
The same can be done in a view to do a partial rendering:
Let's see a greeting: <%= render_component :controller => "greeter", :action => "hello_world" %>
It is also possible to specify the controller as a class constant, bypassing the inflector code to compute the controller class at runtime:
<%= render_component :controller => GreeterController, :action => "hello_world" %>
When to use components
Components should be used with care. They’re significantly slower than simply splitting reusable parts into partials and conceptually more complicated. Don’t use components as a way of separating concerns inside a single application. Instead, reserve components to those rare cases where you truly have reusable view and controller elements that can be employed across many applications at once.
So to repeat: Components are a special-purpose approach that can often be replaced with better use of partials and filters.