web-dev-qa-db-fra.com

Rails: sur le rendement

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:

  1. Où puis-je trouver la teneur en rendement du premier <% = yield%> sous <body>.
  2. Est-ce une Rails façon spécifique d'inclure du code js dans une vue en utilisant <%= yield :jstemplates %> et à propos de <%= yield :some_car %>, est-ce pointer vers une vue ou simplement pour montrer la valeur de some_car?
31
Mellon

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.

54
Peter Brown