Mamy przykładowo dwa dyski twarde (dostepne w widoku jako @dyski), każdy ma zestaw takich samych parametrów.
Chcialbym teraz z lewej strony tabeli w pierwszej kolumni wpisac dane do porównania: Producent, Pojemnosc, Cache, RPM, interface itd itp. Nastepnie chcialbym aby w kolejnych pojawily sie dane dyskow odpowiadajace poszczegolnym parametrom.
Najprostszym rozwiazaniem bylo by pisanie for w kazdym rzedzie z odpowiednim kodem, ale moze jest jakies lepsze rozwiazanie ?
Pierwsze przychodzi mi na mysl takie rozwiazanie:
masz @dyski i powiedzmy @table_headers ktore sa struktura opisujaca parametry (np Struct.new(:title, :method_to_invoke, :css_class). Masz tez dwa partial template _product_column.rhtml i _product_headers_column.rhtml (oczywiscie da sie to zrobic na jednym wszystko zalezy od tego jak ma to wygladac). W nich masz div w ktorym jest ul a kazdy parametr to li i w CSSie masz odpowiednio opisane wyswietlanie jako kolumny.
W skrocie: dla procesowania naglowkow robisz:
render(:partial => "product_headers_column")
i wewnatrz szablonu:
[code=ruby]<% @table_headers.each do |header| %>
<%= header.title -%>
<% end %>[/code]
W ten sposob mamy wylistowane parametry.
Teraz robimy:
[code=ruby]render(:partial => "product_column" , :collection => @dyski)[/code]
Wewnatrz szablonu:
[code=ruby]<% @table_headers.each do |header| %>
Zainspirowany Twoim pomyslem zrobilem to troche inaczej.
Moim zdaniem lista ul>li nie za bardzo tu sie nadaje. Poniewaz (po raz kolejny - moim zdaniem) dane do porownywania to dane tabelaryczne, wsadziłem to w tabele.