J'ai vu du code dans une application Rails v2..
Dans layout/car_general.html.erb
(cette vue est appelée par une méthode dans cars_controller), j'ai vu le 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>
Deux questions à se poser:
<body>
.<%= yield :jstemplates %>
et à propos de <%= yield :some_car %>
, est-ce pointer vers une vue ou simplement pour montrer la valeur de some_car
?Sans aucun argument, yield rendra le modèle du contrôleur/de l'action en cours. Donc, si vous êtes sur le cars/show
page, il rendra views/cars/show.html.erb
.
Lorsque vous passez céder un argument, il vous permet de définir le contenu dans vos modèles que vous souhaitez rendre en dehors de ce modèle. Par exemple, si votre cars/show
la page a un extrait html spécifique que vous souhaitez rendre dans le pied de page, vous pouvez ajouter ce qui suit à votre modèle d'exposition et le car_general
disposition:
show.html.erb:
<% content_for :footer do %>
This content will show up in the footer section
<% end %>
layouts/car_general.html.erb
<%= yield :footer %>
Le guide Rails contient une bonne section sur l'utilisation de yield et content_for: http://guides.rubyonrails.org/layouts_and_rendering.html#understanding-yield
La documentation de l'API pour content_for
est également utile et a d'autres exemples à suivre. Notez que c'est pour Rails 3.1.1, mais cette fonctionnalité n'a pas beaucoup changé depuis 2.3, le cas échéant et devrait toujours s'appliquer pour 3.0.x et 3.1.x.