2010-06-23 17 views
22

Ruby on Rails kullanıyorum ve html.erb dosyalarından birinde bir Ruby kodu bloğu çalıştırmam gerekiyor. Ben böyle yapmak mı:Birden çok Ruby satırını html.erb dosyasında nasıl çalıştırırım

<% def name %> 
<% name = username %> 
<%= name %> 

veya böyle:

<% def name 
name = username %> 
<%= name %> 

Teşekkür okuma için.

+0

Görünümde bir işlev oluşturmaya neden çalışıyorsunuz? Bu büyük olasılıkla modele aittir veya denetleyiciye değil ama kesinlikle – jigfox

+0

notasına bakmadığı için özür dilerim, bir kodun içine hızlıca bir örnek yazdım. – ben

cevap

22

Bir ERB dosyasında bir yöntem tanımlamak alışılmadık bir durumdur, bu yüzden buna karşı öneriyorum. Eğer #each gibi bir blok aramak isterseniz

, aşağıdaki gibi bir şey yapabilirsiniz:

<% names.each do |name| %> 
    <%= name %> 
<% end %> 

<% end %> unutmayın.

+2

ve '' '' '' '' '' '' '' 'unuttuysanız ;-) – jigfox

34

Görüşünüzde ek işlevlere gereksinim duyarsanız, normalde bunları bir yardımcı içinde beyan etmiş olursunuz.

Her denetleyici için bir yardımcı varsa otomatik olarak yüklenir. Eğer bir PeopleController varsa Örneğin, app/helpers klasöründe, bir people_helper.rb olmalı ve bu

module PeopleHelper 
    def name 
    #do something 
    username 
    end 
end 

gibi başka, çok temiz bir alternatif bakmak gerekir, Presenterpattern kullanmaktır, ama bunu düşünmek daha az yaygındır (maalesef). Kod girinti html girinti daha önemlidir benim için de

<% 
    counter_1 = 0 
    counter_2 = 1 
    do_some_more_prep_here 
%> 
<% @records.each do |rec|%> 
    <%# do something with the prepped date in each row %> 
<% end %> 

: i kaçınmaya çalıştığı erb görünüm içinde yakut kodunun birden fazla satır, ihtiyacınız varsa

Aksi takdirde, ben şu tarzını tercih Bu yüzden, bu konuda farklı görüşler duymakla her zaman ilgileniyorum.

+3

Yardım yöntemleri, gideceğiniz yoldur. – tadman

-1

Birinin belirli bir şablonda (bir yardımcı oluşturmanın anlamı yok) html biçimlemesini çoğaltmamaya ihtiyaç duyabileceğini hayal edebiliyorum. Yani, sonuçta oluşan html sayfasının bir çift benzer html biçimlendirmesi bloğu olduğu zaman. Yine de, kolayca kötüye kullanılabilir (okunamaz kod).

<% def f1(a, b, c) %> 
    test: <%= a %>, <%= b %>, <%= c %> 
<% end %> 

<% f1(1, 2, 3) %> 
<% f1(4, 5, 6) %> 
+0

bu benim için işe yaramıyor gibi görünüyor https://i.imgur.com/oWOu5v8.png – barlop

+0

cevabınız işe yaramıyor, tüm bu bir web sayfasındaki işlev içeriğini HTML olarak ele alıyor ray veya ruby ​​kodu olarak değil https://i.imgur.com/rhTNtt5.png – barlop

+0

@barlop Özenle bakmadığınız için üzgünüm. Cevabımı kontrol et. Bu senin için uygun mu? Muhtemelen bu demek istedim. –

İlgili konular