Rails liste sonrası çıktıyı engelleme

Ö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

Çıktı şu şekilde oluyor:

1
2
3
4
[1,2,3,4] #Kurtulmak istediğim nokta.

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 %>

istenilen çıktıyı vermeli diye düşünüyorum

1 Beğeni

Teşekkür ederim.