Bloki

Hej, mam problem ze zdefiniowaniem helpera.

Chcę zrobić kod, który generuje mi zakładki (ang. tabs) dla danej części strony. Przykład użycia powinien wg mnie wyglądać jakoś tak (w widoku)

<%- tabs do |t| -%> <%- t.page "Tytuł pierwszej strony" do |p| -%> treść pierwszej strony, dowolny kod <%- end -%> <%- t.page "Tytuł drugiej strony" do |p| -%> treść drugiej strony, dowolny kod <%- end -%> <%- end -%>
No i kombinowałem w ten sposób, że mam w klasę

class TabBuilder def page yield end end
a w helperze

def tabs(&b) yield TabBuilder.new end
Wyświetla się, zgodnie z przewidywaniami tylko treść bloków przy t.page. Jak dodać do tego kod, by przed każdym yield w TabBuilder#page dodawał tagi HTML? I analogicznie, by na początku i na końcu bloku otwartego jako “tabs do |t|” dokleił tagi HTML?

To powinno działać podobnie do builderów od formularzy ale nie mogę rozgryźć ich kodu źródłowego.

Z góry dzięki, m.

Poczytaj komentarze tutaj

Warto jeszcze poczytac o http://www.railsbrain.com/api/rails-2.2.2/doc/index.html?a=M002176&name=content_for przydaje sie gdy chcesz wstawic cos z poziomu kontrentoego widoku bezposrednio do layoutu.

Np:

layout.rhtml

<%= yield(:sidebar) %>

edit.rhtml
<% content_for(:sidebar) do %>
wszystko z tego bloku znajdzie sie w yield(:sidebar)
<% end %>

brakuje jeszcze tylko content_available?(symbol) ale mozna sobie latwo dorobic :sidebar to po prostu @sidebar_content