2011-10-21 1 views
29

Ho visto del codice in un'app Rails v2.3.Rails: sul rendimento

In layout/car_general.html.erb (questo punto di vista viene chiamato da un metodo in cars_controller), ho visto il codice:

<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> 

Due domande per chiedere:

  1. Dove posso trovare il contenuto resa del prima <% = resa%> sotto <body>.
  2. È un modo specifico per includere il codice js in una vista utilizzando <%= yield :jstemplates %> e che dire di <%= yield :some_car %>, punta a una vista o solo per mostrare il valore di some_car?

risposta

51

Senza alcun argomento, yield renderà il modello dell'attuale controller/azione. Quindi, se sei sulla pagina cars/show, renderà views/cars/show.html.erb.

Quando si passa un argomento di rendimento, consente di definire il contenuto nei modelli che si desidera rendere al di fuori di tale modello. Ad esempio, se la pagina cars/show ha uno specifico snippet HTML che si desidera eseguire il rendering nel piè di pagina, è possibile aggiungere il seguente al modello spettacolo e il layout car_general:

show.html.erb:

<% content_for :footer do %> 
    This content will show up in the footer section 
<% end %> 

layout/car_general.html.erb

<%= yield :footer %> 

La Guida Rails ha una buona sezione sull'utilizzo di resa e content_for: http://guides.rubyonrails.org/layouts_and_rendering.html#understanding-yield

La documentazione API per content_for è anch'essa utile e presenta alcuni altri esempi da seguire. Si noti che è per Rails 3.1.1, ma questa funzionalità non è cambiata molto dal 2.3, se non del tutto e dovrebbe ancora applicare per 3.0.xe 3.1.x.