web-dev-qa-db-ja.com

ERB in Railsの<%、<%=、<%#、 - %>の違いは何ですか?

ERBファイルで使用されている以下の文字の使用方法を説明してください。

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

それぞれの使い方は?

335
simo
<% %>

角かっこ内のRubyコードを実行します。

<%= %>

何かをerbファイルに出力します。

<% -%>

式の後の改行を避けます。

<%# %>

括弧内のコードをコメントアウトします。クライアントには送信されません(HTMLコメントとは対照的に)。

ERBについての詳細は Ruby Doc をご覧ください。

436
auralbee

<% %><%- and -%>はあらゆるRubyコードのためのものですが、結果を出力しません(例えばifステートメント)。 2つは同じです。

<%= %>はRubyコードの結果を出力するためのものです

<%# %>はERBのコメントです

これは良いガイドです: http://api.rubyonrails.org/classes/ActionView/Base.html

85
yalestar

Railsはnotを使用します stdlibのERB をデフォルトで使用し、 erubis を使用します。ソース: この開発者のコ​​メントActionViewのgemspecこれを書いている間にマージ要求を受け入れました

特にハイフン演算子%--%がどのように機能するかで、それらの間には動作の違いがあります。

ドキュメントが不足している RubyのERB形式は「公式に」どこで定義されているのか? ですので、以下は経験的な結論です。

すべてのテストの前提:

require 'erb'
require 'erubis'

[SOMECODE]を使用できる場合

  • 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:改行の場合、次の文字を削除します。

  • エルビス:

    • <% %>=なし)では、-<% %>は同じであるため、<% -%>は役に立ちません。 <% %>は、空白のみが含まれている場合は現在の行を削除し、それ以外の場合は何もしません。

    • <%= -%>内(=付き):

      • 空白のみが含まれている場合は行全体を削除します
      • それ以外の場合、タグの前にスペースがなく、後にホワイトスペースのみがある場合、後に続くホワイトスペースを削除します
      • それ以外の場合、タグの後にスペースはありません:何もしない

例:

# 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

%--%が一緒に行うこと

両方の効果の個別の正確な組み合わせ。

これに対する答えとして、<%%リテラルタグ区切り文字を、あいまいさのために追加しました。これは、chart.jsのツールチップなどを表示するようなjsアプリに必要なタグの<%部分を解釈しないようにerbに指示します。

更新(リンク切れを修正)

ERBに関するすべてがここにあります。 https://puppet.com/docs/puppet/5.3/lang_template_erb.html#tags

7
bkunzi01
  • <% %>:Rubyコードを実行する
  • <%= %>:Erbファイルに出力します。またはブラウザ
  • <% -%>:式の後の改行を避けます。
  • <%# %>:ERBのコメント
4
Neha Nakrani

<% %>はそこにあるコードを実行しますが、結果を表示しません、例えば:
他の場合にはerbファイルで使用できます。

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

temp is 1を印刷します


<%= %>はコードを実行して出力も表示します。例えば:
Rails変数の値を表示することができます。

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

1を印刷します


<% -%>何も表示しないので違いはありません。-%><%= -%>に対してのみ意味があり、これは改行を回避します。


<%# %>はこの中に書かれたコードをコメントアウトします。

1

これらはRuby on Railsで使用されています: -

<%%>: -

<%%>タグは、条件、ループ、ブロックなど、何も返さない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" %>
1
HeadAndTail