2011-08-24 10 views
6

Tworzę aplikację z rubinem na szynach, gdzie mam pozycje/_item.html.erb. Wewnątrz częściowej znajduje się deklaracja zysku, więc w razie potrzeby mogę dodać dodatkową treść. W tym przypadku chcę dodać konkretny przycisk do elementu w zależności od tego, które wywołania są częściowe.Renderowanie zawartości wewnątrz częściowego = yield =

To co próbowałem i to sprawia, że ​​częściowe, ale to nie czyni blok:

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

... 

Próbowałem również używać content_for i innych rzeczy bez powodzenia. Czy istnieje sposób, aby móc renderować określoną zawartość w ramach częściowej przez zysk? Obecnie używam Rails3

EDIT:

Znalazłem się, że jest to: kolekcja hash który uniemożliwia wstawić blok.

Oba kawałki tej pracy kodu:

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

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

Oznacza to, że jeśli zrobię .each mogłem osiągnąć to, co chcę, ale to będzie brzydki kod. Ktoś wie, jak to obejść?

Odpowiedz

4

content_for powinien działać dobrze w tym przypadku. Oto kod, który właśnie dwukrotnie sprawdziłem na miejscu.

somewhere.html.erb

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

_item.html.erb

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

Jak pracujesz na to uwagę? Próbowałem ustawić treść content_for wewnątrz powyżej, poniżej i wokół renderowania i nadal nie widzę zawartości renderowanej z częściowym. Czy to dlatego, że używam również kolekcji? – roloenusa

+0

W _item.html.erb możemy użyć content_for zamiast yield '<% content_for: foobar if content_for? : foobar%> ' – rajkamal

+0

Czy jest szansa, że ​​możesz rzucić szybki przykład jak wygląda wywoływanie renderowania? – roloenusa

Powiązane problemy