Renderowanie tabelki "porównywania produktów"

Witam,
Chciałbym w RoR zrealizowac wyswietlanie tabelki zawierajace porownanie parametrów produktow.

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 ?

Bede wdzieczny za wszelkie sugestie.

Pozdrawiam
Pawel

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| %>
  • <%= product_column.send(header.method_to_invoke.to_sym) -%>
  • <% end %>[/code] Nie mam pomyslu by rozwiazac te sprawe bardziej blyskotliwie (w sensie idei nie samego kodu)

    Dzieki.

    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.

    Sam kod do tego umieściłem w helperze

    def render_compare_row(opis,collection, pole)
        row = ""
        collection.each { |p|
          row += content_tag("td",p.send(pole))
        }
        content_tag("tr",
            content_tag("td", opis)+row
            )
    
    end

    I teraz w widoku wywoluje sobie to tak:

    <tr>
    <%= render_compare_row("Pojemnosc", @dyski, "size") %>
    </tr>

    Pewnie nie jest to najlepsze rozwiazanie, ale daje mi odpowiada najbardziej.

    Dzieki jeszcze raz za sugestie i inspiracje.