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| %>
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”.
<% 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]
[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ć…