Jau gan ilgą laiką dirbu su Ruby, o jis vis dar nenustoja stebinti.
Dirbant su Rails’u (ypač kuriant template’us) dažnai tenka įdėti besikartojančius dummy elementus (pvz. naujienos, meniu punktai ir pan.). Pats neefektyviausias būdas yra žinoma copy-paste. Kurį laiką naudojau kažką tokio:
[code]
< % (1..5).each do |i| %>
Dummy text
< % end %>
[/code]
ir jaučiausi kietas hakeris 😉
Tačiau kažkur giliai viduje žinojau, kad kintamasis “i” čia yra nereikalingas, jutau kad aš atvedžiau jį į gyvenimą, kuriame jam nėra skirta nieko nuveikti, visą laiką kol bus rašomas “Dummy text” gyventi su nepilnavertiškumo kompleksu ir galiausiai išnykti taip ir nepalikus jokio pėdsako šiame pasaulyje.
Tvirtai nusprendžiau daugiau nežaloti nekaltų sielų (nors ir skaitmeninių, gyvenančių vos kelias akimirkas) ir surasti būda kaip galėčiau apsieiti be jų. Ir toks būdas yra!
[code]
< % 1.upto 5 do %>
Dummy text
< % end %>
[/code]
Update: kaip ir buvo pažymėta komentaruose dar gėriau naudoti “times” (kas beje parašyta pačioje Agile Web Development with Ruby on Rails pradžioje =))
[code]
< % 5.times do %>
Dummy text
< % end %>
[/code]
Gera yra žinoti, kad pakeitei kažkam gyvenimą 😉
Arba dar graziau ir israiskingiau butu taip 🙂
Dummy text
5.times do
Dummy text
end
atėjęs tik su teorinėmis žiniomis apie rails’us, skaičiau kad, jis tipo kaip ir vadovaujasi DRY(don’t repeat yourself) tai kaip čia dabar gaunasi su tuo dummy text? tai visgi ar tai DRY(kažką belenką ant elementų dedant) ar kaip čia gaunasi? prašom paaiškinti man. ačiū.
belekas:
Simple. Pvz. kuriant puslapio template’ą turi navigacinį meniu (tą ul su daug li jame ;)). Taigi vietoje to, kad rašyti
ul
li dummy text /li
li dummy text /li
li dummy text /li
/ul
rašai tiesiog
ul
3.times do
li dummy text /li
end
/ul
Beje, galima ir pirmuoju budu darant nerasyti |i|:
(1..5).each do
puts “Dummy text”
end
Robertai,
o kiek gyvenime pasitaiko tokiu situaciju, kada keleta kartu reikia lygiai toki pati teksto fragmenta iemest?
Na siaip bent jau is mano praktikos tai pasitaike, gal koki viena ar du kartus, o visais kitais atvejais – niekaip neisisuksi be to iteracijos numerio “i” 😉