Rails中的ERB中的<%,<%=,<%#和-%>有什麼區別?

可否請您描述一下ERB文件中使用的如下字符的用法: html

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

每一個有什麼用? git


#1樓

Rails默認使用stdlib的ERB ,而是使用erubis 。 資料來源: 該開發人員的評論ActionView的gemspec 接受了我在編寫此 文檔時所作的 合併請求github

它們之間行爲的差別,特別是關於如何連字符運營%--%的工做。 c#

文檔稀缺, Ruby的ERB格式在哪裏「正式」定義? 所以,如下是經驗結論。 瀏覽器

全部測試都假定: ruby

require 'erb'
require 'erubis'

什麼時候能夠使用- less

  • ERB:你必須經過-trim_mode的選項ERB.new使用它。
  • erubis:默認啓用。

例子: 工具

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

-%是: 測試

  • ERB:若是下一個字符是換行符,則將其刪除。 ui

  • erubis:

    • <% %> (無= )中, -沒用,由於<% %><% -%>相同。 <% %>若是僅包含空格,則刪除當前行,不然不執行任何操做。

    • <%= -%> (帶有= ):

      • 若是隻包含空格,則刪除整行
      • 不然,若是標記前沒有空格,然後有空白,則刪除後面的空白
      • 不然,標記後會有一個非空格:什麼都不作

例子:

# 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

%-做用:

  • ERB:僅在標記以前和以前的換行符以後刪除空格,但前提是以前只有空格。

  • erubis:無用,由於<%- %><% %>相同(不帶= ),而且不能與=一塊兒使用,這是-%有用的惟一狀況。 因此永遠不要使用這個。

例子:

# 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

%--%一塊兒作什麼

兩種效果的確切組合分別存在。


#2樓

因爲其晦澀難懂,我添加了<%%文字標籤訂界符做爲對此的答案。 這將告訴erb不要解釋標記的<%部分,這對於js應用程序(例如顯示chart.js工具提示等)是必需的。

更新(修復斷開的連接)

如今能夠在如下位置找到有關ERB的全部信息: https : //puppet.com/docs/puppet/5.3/lang_template_erb.html#tags


#3樓

這些是在軌道上的紅寶石中使用的

<%%>:-

<%%>標記用於執行不返回任何條件(例如條件,循環或塊)的Ruby代碼。 例如:-

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

<%=%>:-

用於顯示內容。

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

<%-%>:-

Rails擴展了ERB,所以您只需在Rails模板的標籤中添加尾隨連字符就能夠取消換行符

<%#%>:-

註釋掉代碼

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

#4樓

<% %>在其中執行代碼,但不打印結果,例如:
咱們能夠將其用於erb文件中。

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

將打印temp is 1


<%= %>執行代碼並打印輸出,例如:
咱們能夠打印rails變量的值。

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

將列印1


<% -%>沒什麼區別,由於它不打印任何內容, -%>僅對<%= -%>有意義,這樣能夠避免換行。


<%# %>將註釋掉其中編寫的代碼。


#5樓

  • <% %> :執行紅寶石代碼
  • <%= %> :打印到Erb文件中。 或瀏覽器
  • <% -%> :避免在表達式後換行。
  • <%# %> :ERB評論
相關文章
相關標籤/搜索