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.