Raylarda ERB'de <%, <% =, <% # ve -%> arasındaki fark nedir?


368

Bazıları lütfen ERB dosyasında kullanılan aşağıdaki karakterlerin kullanımını açıklayabilir:

<%   %>
<%=  %>
<%  -%>
<%#  %>

her birinin kullanımı nedir?


1
Burada bazı harika cevaplarınız var. Ayrıca Haml'in ERb'ye genellikle üstün bir alternatif olduğunu unutmayın.
Marnen Laibow-Koser

1
Evet, başa çıkmak ERb'den çok daha kolay
simo


@Ciro Santilli: Yaşa rağmen, bu referanslarınızdan daha eksiksiz görünüyor. Bunları bunun bir kopyası olarak kapatmak için oy veriyorum ..
Brad Werth

<%= %>ve <%= -%>farklıdır: yalnızca ikincisi arkadaki boşlukları kaldırır.
illüzyonist

Yanıtlar:


476
<% %>

Parantez içindeki yakut kodunu yürütür.

<%= %>

Bir şeyi erb dosyasına yazdırır.

<% -%>

İfadeden sonra satır sonunu önler.

<%# %>

Parantez içindeki kodu yorumlar; istemciye gönderilmedi (HTML yorumlarının aksine).

ERB hakkında daha fazla bilgi için Ruby Doc'u ziyaret edin .


17
Ben kod başka bir yerde bu varyant başka tanıştı <% ==%> kimse ne olduğunu biliyor mu?
okliv

38
Çifte eşit, dizenin hamda olduğu gibi kaçmaması anlamına gelir.
Richard_G


3
Ama ... ama ... hemen sonra Ruby yorumuyla <%#normal <%bir #şey ... Evet, bunun özel bir şey olduğunu düşünmek eğlenceli, ama özel bir sözdizimsel yapıdan ziyade sadece bir ERB deyimi değil mi?
BalinKingOfMoria Eski CM'leri

6
@QPaysTaxes bunun için üzgünüm, haklısın ... Örneğin, çok satırlı ERB'niz varsa <%...%>, hepsini<%#...%> yorumlar , sadece normal bir yorum olsaydı yapmazdı (yani yalnızca satırı yorumlayacaktır) açık).
MorinKingOfMoria Eski CMs

86

<% %>ve <%- and -%>herhangi bir Ruby kodu içindir, ancak sonuçları çıktılamaz (örneğin, ifadeler). ikisi aynı.

<%= %> Ruby kodunun sonuçlarını çıktılamak içindir

<%# %> bir ERB yorumu

İşte iyi bir rehber: http://api.rubyonrails.org/classes/ActionView/Base.html


Açıklığın <%-önde gelen boşluk için hiçbir şey yapmadığını görmüyorum ve hiçbir yerde belgelendiğini görmüyorum. Bundan emin misin? Belki de ERB'nin farklı bir lezzeti. Stdlib belgelerinde bunun için gösterilen seçenek yoktur.
Andrew Vit

1
@AndrewVit - Bu yanıtta başvurulan sayfadan (ActionView :: Temel dokümanlar sayfası): "<% - ve -%>, son satırsonu dahil olmak üzere baştaki ve sondaki boşlukları bastırır ve <% ve%> ile birbirinin yerine kullanılabilir. "
Earl Jenkins

5
<% =%> İçin önde gelen boşluk nasıl bastırılır?
Bogdan Gusiev

52

Raylar yok değil kullanmak stdlib en ERB kullandığı varsayılan olarak erubis . Kaynaklar: Bu geliştiricinin yorumu , ActionView'in gemspec'i , bunu yazarken yaptığım birleştirme isteğini kabul etti .

Orada olan nasıl tire operatörleri özellikle aralarındaki davranış farklılıkları, %-ve -%işin.

Belgeler az, Ruby'nin ERB formatı "resmi olarak" nerede tanımlanıyor? yani izleyen şey ampirik sonuçlardır.

Tüm testler varsayalım:

require 'erb'
require 'erubis'

Ne zaman kullanabilirsiniz -

  • ERB: Eğer geçmelidir -için trim_modeseçeneği ERB.newkullanmak.
  • erubis: varsayılan olarak etkindir.

Örnekler:

begin ERB.new("<%= 'a' -%>\nb").result; rescue SyntaxError ; else raise; end
ERB.new("<%= 'a' -%>\nb"  , nil, '-') .result == 'ab'  or raise
Erubis::Eruby.new("<%= 'a' -%>  \n b").result == 'a b' or raise

Ne -%yapar:

  • ERB: yeni satırsa sonraki karakteri kaldır.

  • erubis:

    • içinde <% %>(olmadan =), -çünkü böyle bir durumda olan <% %>ve <% -%>aynıdır. <% %>yalnızca beyaz boşluk içeriyorsa geçerli satırı kaldırır ve başka bir şey yapmaz.

    • içinde <%= -%>(ile =):

      • yalnızca beyaz boşluk içeriyorsa tüm satırı kaldır
      • aksi halde, etiketten önce boşluk yoksa ve yalnızca beyaz boşluklar varsa, arkasından gelen beyaz boşlukları kaldırın
      • aksi halde, etiketten sonra boşluk bırakılmaz: hiçbir şey yapma

Örnekler:

# Remove
ERB.new("a \nb <% 0 -%>\n c", nil, '-').result == "a \nb  c" or raise

# Don't do anything: not followed by newline, but by space:
ERB.new("a\n<% 0 -%> \nc", nil, '-').result == "a\nb \nc" or raise

# Remove the current line because only whitesapaces:
Erubis::Eruby.new(" <% 0 %> \nb").result == 'b' or raise

# Same as above, thus useless because longer.
Erubis::Eruby.new(" <% 0 -%> \nb").result == 'b' or raise

# Don't do anything because line not empty.
Erubis::Eruby.new("a <% 0 %> \nb").result == "a  \nb" or raise
Erubis::Eruby.new(" <% 0 %> a\nb").result == "  a\nb" or raise
Erubis::Eruby.new(" <% 0 -%> a\nb").result == "  a\nb" or raise

# Don't remove the current line because of `=`:
Erubis::Eruby.new(" <%= 0 %> \nb").result == " 0 \nb" or raise

# Remove the current line even with `=`:
Erubis::Eruby.new(" <%= 0 -%> \nb").result == " 0b"   or raise

# Remove forward only because of `-` and non space before:
Erubis::Eruby.new("a <%= 0 -%> \nb").result == "a 0b"   or raise

# Don't do anything because non-whitespace forward:
Erubis::Eruby.new(" <%= 0 -%> a\nb").result == " 0 a\nb"   or raise

Ne %-yapar:

  • ERB: etiketinden önce ve önceki yeni satırlardan sonra boşlukları kaldırın, ancak yalnızca daha önce boşluk varsa.

  • erubis: işe yaramaz çünkü (onsuz ) <%- %>aynıdır ve bu kullanılamaz, ki bu yararlı olabilir. Yani bunu asla kullanmayın.<% %>==-%

Örnekler:

# Remove
ERB.new("a \n  <%- 0 %> b\n c", nil, '-').result == "a \n b\n c" or raise

# b is not whitespace: do nothing:
ERB.new("a \nb  <%- 0 %> c\n d", nil, '-').result == "a \nb   c\n d" or raise

Ne %-ve -%yapmak birlikte

Her iki efektin ayrı ayrı kombinasyonu.


1
İkinci satırda Rails'in erubis'e bağlanırken eruby kullandığını yazdınız.
Daniel Jonsson

1
@DanielJonsson rapor için teşekkürler: erubis olması gerekiyordu. Pek çok versiyon ile çıldırmak. Güncellenmiş.
Ciro Santilli 法轮功 冠状 病 六四 事件 法轮功

10
  • <% %> : Ruby kodunu çalıştırır
  • <%= %>: Erb dosyasına yazdırır. Veya tarayıcı
  • <% -%> : İfadeden sonra satır sonunu önler.
  • <%# %> : ERB yorumu

7

<%%Belirsiz etiket sınırlayıcısını belirsizliği nedeniyle buna bir cevap olarak ekledim . Bu, <%erb'ye etiketin chart.js araç ipuçlarını görüntüleme gibi js uygulamaları için gerekli olan bölümünü yorumlamamasını söyleyecektir .

Güncelleme (Bozuk bağlantı düzeltildi)

ERB ile ilgili her şeyi şimdi bulabilirsiniz: https://puppet.com/docs/puppet/5.3/lang_template_erb.html#tags


1
bu bağlantı OP'ye doğru cevap veriyor
Ben Tinsley

Bağlantı kesildi
andreofthecape

Yeni bağlantıyla güncellendi!
bkunzi01

3

Bunlar raylar üzerinde yakut olarak kullanılır : -

<%%>: -

<%%> Etiketleri, koşullar, döngüler veya bloklar gibi hiçbir şey döndürmeyen Ruby kodunu yürütmek için kullanılır. Örneğin :-

<h1>Names of all the people</h1>
<% @people.each do |person| %>
  Name: <%= person.name %><br>
<% end %>

<% =%>: -

içeriği görüntülemek için kullanın.

Name: <%= person.name %><br>

<% -%>: -

Rails, ERB'yi genişletir, böylece Rails şablonlarındaki etiketlere bir sonlu kısa çizgi ekleyerek yeni satırı bastırabilirsiniz

<% #%>: -

kodu yorumla

<%# WRONG %>
Hi, Mr. <% puts "Frodo" %>

1

<% %>kodu orada çalıştırır, ancak sonucu yazdırmaz, örneğin:
Bir erb dosyasında başka durumlarda da kullanabiliriz.

<% temp = 1 %>
<% if temp == 1%>
  temp is 1
<% else %>
  temp is not 1
<%end%>  

Yazdırılacak temp is 1


<%= %>kodu yürütür ve çıktıyı yazdırır, örneğin:
Bir ray değişkeninin değerini yazdırabiliriz.

<% temp = 1 %>
<%= temp %>  

Yazdırılacak 1


<% -%>Hiçbir şey basmadığı için fark etmez, -%>sadece mantıklıdır <%= -%>, bu yeni bir çizgiden kaçınır.


<%# %> bunun içinde yazılan kodu yorumlar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.