Öncelikle herkese iyi forumlar.
Rails ile proje geliştirirken html dosyası içinde each döngüsü ile ekrana listenin elemanlarını yazdırabiliyorum fakat en sonda çıktı olarak listenin kendisini döndürüyor.
Bunu nasıl engelleyebilirim fikri olan varmı ?
Şimdiden teşekkürler.
Html
<%= @arr.each do |i|%>
<p><%= i%></p>
<%end%>
Posts controller
class PostsController < ApplicationController
def index
arr = [1,2,3,4]
end
end
Bundan dolayı array’in kendisi de çıktı olarak yazılıyor. “Getting Started with Rails” sayfasında bulduğum kadarıyla şöyle diyor:
Here, we can see two types of ERB tags: <% %> and <%= %> . The <% %> tag means “evaluate the enclosed Ruby code.” The <%= %> tag means “evaluate the enclosed Ruby code, and output the value it returns.”
Yani = olduğunda içerideki kod Ruby kodu olarak değerlendirilmekle kalmıyor, döndürdüğü değer de çıktı olarak yazılıyor. = olmadan sadece kod işleniyor.
Peki 1) neden array’in kendisi yazılıyor, 2) neden başta yazılmıyor da sonda yazılıyor? Array.each’in dokümantasyonunda “array’i döndürür” diyor. Dolayısıyla %= ,dönen bu array’i yazdırıyor.
Neden sonda yazdırıyor için ise kaynak koduna bakarsanız (sağ üstten “click to toggle source” derseniz)
VALUE
rb_ary_each(VALUE ary)
{
long i;
RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length);
for (i=0; i<RARRAY_LEN(ary); i++) {
rb_yield(RARRAY_AREF(ary, i));
}
return ary;
}
Array’in elemanlarını yield ettikten sonra en son return ediyor gördüğünüz üzere.
Uzun lafın kısası
<% @arr.each do |val| %>
<p><%= val %></p>
<% end %>