2011-08-24 13 views
6

Sto creando un'applicazione con ruby ​​su rails dove ho elementi/_item.html.erb. All'interno del partial è una dichiarazione di rendimento in modo da poter aggiungere contenuti extra, se necessario. In questo caso, desidero aggiungere un pulsante specifico all'elemento a seconda di quale vista viene chiamata parziale.Rendering contenuto all'interno di un parziale tramite = yield

Questo è quello che ho provato e rende il parziale, ma non rende il blocco:

_item.html.erb

<%= yield if block_given? %> 
<div> 
    <%= item.name %> 
</div> 

someview.html.erb

... 

<% render(:partial => 'items/item', :collection => current_user.items do %> 
    <%= "HELLO" %>  
<% end %> 

... 

Ho anche provato a usare content_for e altre cose senza successo. C'è un modo per essere in grado di rendere il contenuto specifico all'interno di un rendimento parziale? Attualmente sto usando Rails3

EDIT:

ho scoperto che è il: collezione hash che rende impossibile inserto del blocco.

Entrambi questi pezzi di lavoro Codice:

<%= render :layout => 'items/item' do %> 
     Hello world  
<% end %> 

<%= render :layout => 'items/item', :locals => {:item => current_user.items.first} do %> 
    Hello world  
<% end %> 

Ciò significa che se faccio un .each ho potuto realizzare quello che voglio ma sarebbe brutto codice. Qualcuno conosce un modo per aggirare questo?

risposta

4

content_for dovrebbe funzionare correttamente in questo caso. Ecco il codice che ho appena ricontrollato localmente.

somewhere.html.erb

<% content_for :foobar do %> 
    fubar 
<% end %> 

_item.html.erb

<% if content_for? :foobar %> 
    <%= yield :foobar %> 
<% end %> 
+1

Come stai lavorando questo fuori? Ho provato a impostare il codice content_for all'interno di sopra, sotto e intorno al rendering e non riesco ancora a vedere il contenuto da renderizzare con il partial. È perché sto usando anche una collezione? – roloenusa

+0

In _item.html.erb possiamo usare content_for invece di yield '<% content_for: foobar if content_for? : foobar%> ' – rajkamal

+0

Esiste la possibilità di lanciare un rapido esempio di come dovrebbe apparire la chiamata di rendering? – roloenusa

Problemi correlati