I saw some code in a Rails v2.3 app.
In layout/car_general.html.erb
(this view is called by a method in cars_controller) , I saw the code:
<body> <%= yield %> <%= javascript_include_tag 'jquery-1.4.2.min' %> <% javascript_tag do %> <%= yield :jstemplates %> var some_car = new Object; <%= yield :some_car %> <% end -%> </body>
Two questions to ask:
<body>
. <%= yield :jstemplates %>
and what about <%= yield :some_car %>
, is it point to a view or just to show the value of some_car
?When yield is called in side a method then method requires a block with in it. A block is simply a chunk of code, and yield allows us to inject that code at some place into a method. Simple Yield: When the yield keyword used inside the body of a method, will allow us to call that method with a block of code.
It tells Rails to put your view content to this block (which is called by yield ) at that place in the layout file.
Without any arguments, yield will render the template of the current controller/action. So if you're on the cars/show page, it will render views/cars/show. html. erb .
yield tells ruby to call the block passed to the method, giving it its argument. yield will produce an error if the method wasn't called with a block where as return statement don't produces error.
Without any arguments, yield will render the template of the current controller/action. So if you're on the cars/show
page, it will render views/cars/show.html.erb
.
When you pass yield an argument, it lets you define content in your templates that you want to be rendered outside of that template. For example, if your cars/show
page has a specific html snippet that you want to render in the footer, you could add the following to your show template and the car_general
layout:
show.html.erb:
<% content_for :footer do %> This content will show up in the footer section <% end %>
layouts/car_general.html.erb
<%= yield :footer %>
The Rails Guide has a good section on using yield and content_for: http://guides.rubyonrails.org/layouts_and_rendering.html#understanding-yield
The API documentation for content_for
is helpful too and has some other examples to follow. Note that it's for Rails 3.1.1 , but this functionality has not changed much since 2.3, if at all and should still apply for 3.0.x and 3.1.x.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With