Jak z railsa/ruby`ego tworzyć id dla elementów html?

Witam wszystkich,
chciałbym dowiedzieć się, jak można stworzyć listę N elementów (i w sumie dowolne elementy html) tak, aby każdy element

  • miał inny, automatycznie wygenerowany identyfikator. A ponieważ lepiej wysłowię się za pomocą przykładu:

    Powiedzmy, że chciałbym wygenerować 10 pozycji listy, co najprościej robię:

    <% 10.times do |i| %> <li><%= "element #{i}" %></li> <% end %>
    Ale teraz chciałbym też, żeby każdy z kolejnych elementów

  • miał wygenerowane w podobny sposób id, zależne od licznika; żeby utworzony kod html wyglądał mniej więcej tak:

    [code=html]

  • element 0
  • element 1
  • (...)
  • element 9
  • [/code] Zrobiłem coś takiego, ale jest paskudne i na pewno [i]nieRailsowe[/i]: [code=ruby]<% 10.times do |i| %>
  • ><%= "element #{i}" %>
  • <% end %>[/code] Czy ktoś ma jakiś inny pomysł?

    Troche bezsens, ale…

    [code=ruby]<% i = 0 %>
    <% for i >= 10 %>

  • element <%= "#{i}" %>
  • <% i = i++ %> <% end %>[/code] łapiesz?

    a może helper taki chociażby jak tu:
    http://termos.vemod.net/list-helper-for-rails

    Z reguły jak wyświetlasz listę to wyświetlasz listę obiektów i z reguły unikalne id zawiera w sobie id obiektu, ale może to też być numer porządkowy np:

    numer porządkowy:

    <% @articles.each_with_index do |article, idx| -% <%= content_tag(:li, h(article.name), :id => "article_#{idx}" -%> <% end -%>
    lub:
    id obiektu:

    <% @articles.each do |article| -%> <%= content_tag(:li, h(article.name), :id => "article_#{article.id}" -%> <% end -%>
    id obiektu + class (generowane automatycznie przez content_tag_for):

    <% @articles.each do |article| -%> <% content_tag_for(:li, article) do -%> <%=h article.name -%> <% end -%> <% end -%>
    Jeśli chcesz po prostu wyświetlić listę nieprzypisaną do żadnych obiektów to możesz zastosować to co napisałeś, nie wiem dlaczego myślisz że to jest “nie-railsowe”.

    [quote=sowiak]Troche bezsens, ale…

    [code=ruby]<% i = 0 %>
    <% for i >= 10 %>

  • element <%= "#{i}" %>
  • <% i = i++ %> <% end %>[/code] łapiesz?[/quote] Fakt, trochę bezsens bo w ogóle nie zadziała, to nie kod Rubiego, w Rubim nie ma takiej konstukcji for, ani i++ , poza tym przypisywanie zmiennych w widokach i korzystanie z pętli for operującej na zmiennej jako indeksie to nie idiomatyczny Ruby (raczej PHP albo Java). W Rubim prawie zawsze korzysta się z iteratorów i [url=http://apidock.com/ruby/Enumerable]Enumerable[/url]

    Tak wlasnie, sorki za zamet, ale wczoraj mocno nie wstanie bylem, jak to pisalem. :wink:

    [quote=hosiawak]Z reguły jak wyświetlasz listę to wyświetlasz listę obiektów i z reguły unikalne id zawiera w sobie id obiektu, ale może to też być numer porządkowy np:

    numer porządkowy:

    <% @articles.each_with_index do |article, idx| -% <%= content_tag(:li, h(article.name), :id => "article_#{idx}" -%> <% end -%>
    (…)

    Jeśli chcesz po prostu wyświetlić listę nieprzypisaną do żadnych obiektów to możesz zastosować to co napisałeś, nie wiem dlaczego myślisz że to jest “nie-railsowe”.[/quote]
    Dzięki wielkie, właśnie o czymś takim myślałem.
    Stwierdziłem, że moje rozwiązanie jest nierailsowe, bo wpakowałem się tagami <% %> wewnątrz tagu html, co przy podświetlaniu składni plików rhtml/erb wygląda zupełnie niepoprawnie, ale skoro sam mówisz, że można tego użyć…

    Pewnie, że można, chociaż czytelniej jest użyć helpera content_tag