web-dev-qa-db-ja.com

railsのhtml.erbテンプレートのコメントをブロックする

Rubyコードと混合したhtmlをコメントアウトするにはどうすればよいですか?

some text <% ... %> more text <%= ... %>
something else
<% ... %>

Jspでは<%-- ... --%>ですが、Railsには簡潔なオプションがありません。

単純なhtmlコメント<!-- ... -->は機能しません:Rubyコードはまだ実行され、エラーが叫ばれます。

HTMLコメントでif falseを使用するオプションがありますが、IDEがサポートしていないことは言うまでもなく、非常に冗長です。

純粋なRubyからのオプションもありますが、これは驚くほど機能します。

<%
=begin %>
... html and Ruby code goes here
<%
=end %>

冗長で奇妙に見え、私が知っているRuby IDEのどれもそれをサポートしていないことを除いて、それは一般に大丈夫です(ええ、私は1つのキーストロークでコメント/コメントアウトしたいです)。

私は興味があります、レールでこれを行う「公式」はありますか?

ありがとう!

111
Nikita Rybak

私は解決策としては数えませんが、おそらく

<% if false %>
   ...
<% end %>

または、少し汚いと感じた場合は、単に何も出力しないヘルパーを作成します。

私はそれを決して必要としませんでした、しかし、私はこれのためにすぐに使える解決策がないようにつまずきました。

109
Chubas

これを使用して、単一行にコメントを付けます。

<%# your_Ruby_code %>

複数行の場合、

<% 
=begin %>  <% Ruby_code %>
<% 
=end %>

あなたが言ったことはうまくいくでしょう。

155
Garfield

=beginアプローチは面倒です:

  1. 1行にあるHTMLとRuby(またはHTMLのみ)が混在している場合は機能しません
  2. 入力するのは面倒です

<% if false %>アプローチは機能しますが、奇妙に見え、コードを見る他の人にあなたの意図についてのヒントを与えません。

私の解決策は次のとおりです。

application_helper.rbで、次のようにメソッドを追加します。

def comment
end

次に、ビューテンプレートで次のように言うことができます。

<% comment do %>Some stuff that won't be rendered...<% end %>

これは、任意のRubyメソッドがブロックを取ることができるため機能しますが、メソッドにyieldが含まれていない場合、渡されたブロックを静かに無視します。

24
sumizome
<%#=

...commented
multiline
block...

%>
9
Piotr Turek

テンプレート内のブロックコメントの場合、私のテキストエディター(Komodo)は @ Garfieldの推奨 もっとも不快なものについてこのバリエーションを見つけます。

<%# A long multiline comment in a Rails template ...
  # line 2
  # and so on ... 
  # %>
7
klenwell

Erbタグをコメントアウトするには、開始タグの=記号の前にRubyコメントハッシュ記号を使用します

<p>
 This is some text I want to keep
 <%= @some_object.some_attribute %>
</p>
<p>
  I want to keep this text but comment out the erb tag
  <%#= @some_object.another_attribute %>
</p>
<!--
<p>
  I want all of this text commented out including the erb tag
  <%#= @some_object.some_attribute %>
</p>
-->
<!--
<p>
 I just want this html commented out but I want to keep the erb tag
 <%= @some_object.some_attribute %>
</p>
-->
6
jamesc

<% %>を使用してRubyブロックを配置できるため、コメントを挿入するために確実に使用できます。

よりシンプルでエレガントなソリューションは次のようになります...

<%
# See! I am a Ruby Comment
# And I am multi-line
# I look like a recognizable Ruby comment block too
# and not so complex
# The only drawback with me is the Hash symbol you have to repeat
# But it's the norm, isn't it?
%>
6
Sagar Ranglani

= beginの後、%>を入力する必要はありません。

<%
=begin

code code code code code code 
code code code code code code 
code code code code code code 
code code code code code code 

=end %>
4
Michal

これまでの回答の一部への補遺です。 = begin/= endソリューションが最も有用であることがわかりましたが、美しさのために次のように記述します。

<%
=begin
  <p>HTML will be ignored</p>
  <%= 'and so will Ruby' %>
  <p>
    <%= 'plus the whole block will be greyed in editor' %>
  </p>
=end
%>

=endまですべてが無視されるので、=begin%>タグを閉じる必要も、=end<%タグを開く必要もないことに注意してください。以前の回答でも指摘されていました)

これは、Rubyとhtmlコードの混合ブロックを完全にアウトカムする最もエレガントなソリューションであり、<% if false %>ソリューションとは対照的に、エディターでもグレー表示されることがわかりました。唯一の欠点は、=begin=endを行の最初に配置する必要があることです。

1
ViggoV

コードが実行される場所を覚えておく必要があります。 RubyコードがWebブラウザーに提供される前にサーバーで実行されるため、Rubyスタイルのコメントが機能します。これは、HTMLコメントが機能しない理由も説明します。Rubyはすでに実行されています。

使用しているIDEは、コードのブロックをコメントアウトするためのカスタムマクロの作成をサポートしていませんか?

1
John Topley

Sublime Textのブロックコメントショートカット ctrl+shift+/ 通常のHTMLまたはErbタグのどちらを選択したかがわかり、それに応じて<!---または<% =begin %>のいずれかが配置されます。

1
iono

コメントと呼ばれるHEREDOCを使用する

長所:

  • これがコメントであることは自明です
  • ErbおよびHTMLタグに対応
  • (1つの長い文字列として)ok構文強調表示

短所:

  • 奇妙な3行の終了構文
  • キーボードショートカットなし

コード:

開始タグは

<% <<-COMMENT %>

the above closing erb tag is just for looks (to match the end),
but don't put anything else there, it may show up on the page

または

<%
<<-COMMENT
%>

ここでは何も実行されないか、ブラウザに表示されません

<P>
    this will not be displayed in the browser
    <strong> even in the developer's tools </strong>
</p>

<% 1_000_000_000_000.times do |count| %>

for the <%= count %>'th time, this won't run a trillion times,
this is all just a string

all of these %>, <%, <% end %>, end, do, <!--, won't cause any issues.

but the below opening erb tag is important (if you used any erb tags in the comment).
I have no clue why?

終了タグ

はい、3行である必要があります????。開始erbタグが重要である理由はわかりませんが、重要です。 (コメントでerbタグを使用しなかった場合を除く)。

<%      
COMMENT
%>
0
Arye Eidelman

これは私のために働いた唯一のものです。

<%
=begin %>

code code code code code code 
code code code code code code 
code code code code code code 
code code code code code code 

=end %>
0
Platon

<%if false%>とHTMLコメントの両方を同時に使用できます。

<%if false%><--

stuff to comment out

--><%end%>

利点は次のとおりです。

  • Rubyコードは実行されません

  • IDEでコメント化されたブロックは灰色になります

  • 他の開発者にとって意図は明らかです

0
stillwaiting