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


119

Rubyコードと混合したhtmlをどのようにコメントアウトしますか?

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

jspでそれは本当にシンプルです:<%-- ... --%>、しかし私はレールで任意の簡潔なオプションを見つけることができません。

単純なhtmlコメント<!-- ... -->は機能しません。rubyコードは引き続き実行され、エラーが発生します。

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

純粋なルビーから来るオプションもありますが、これは驚くほどうまくいきます。

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

それは冗長で奇妙に見え、私が知っているルビIDEのどれもそれをサポートしていないことを除いて、一般的には問題ありません(そうです、私は1回のキーストロークでコメント/コメントアウトしたいです)。

私は好奇心旺盛ですが、これをレールで行うことの「公式」はありますか?

ありがとう!

回答:


115

私は解決策として数えませんが、おそらくチャンクを

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

または、少し汚れている場合は、何も出力しないヘルパーを作成します。

私はそれを必要とすることは一度もありませんが、これにはすぐに使える解決策はないようです。


@Chloeなぜあなたが私にコメントを送ったのかよくわからないが、あなたがまったく正しい<%= false %>とは思わない。<% if false %>=記号なしでも機能する、提供された解決策を試してください
jamesc

@jamescあなたが私の返事を見る前にあなたのコメントは削除されました。誰かがあなたが使用するように言ったあなたのコメントを削除しました<%# if false %>
クロエ

162

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

<%# your_ruby_code %>

複数行の場合、

<% 
=begin %>  <% ruby_code %>
<% 
=end %>

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


2
それがわかっているので、もっと簡単なことがあれば興味があります:)
Nikita Rybak

2
= begin開始-終了がすべてだと思います= end#完全にコメントされているので、私のコメントは無視できます:P
Garfield

3
=が答えのように新しい行の先頭にある場合に機能します
dhaval

これが<%=%>の場合はどうなりますか?等号の前または後にハッシュはどこに行きますか?
BKSpurgeon、2015年

おっと、複数行のコードでコメントを追加しようとしました。代わりに回答を投稿します。
ViggoV

29

この=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


3
<%comment do%> ... <%comment end%>のように書くこともできます。この構文を崇高なテキストに追加して、実際のコメントのように見えるようにしました。
マリアーノカヴァッロ2014

1
素敵なソリューション!! 1つの改良:それは一種ハックのある無効にするコメントコード、そうではなくメソッドを呼び出すignoredisable、我々は完全に意味的な解決策を得る:<% ignore do %>…<% end %>
tanius


7

テンプレートのブロックコメントの場合、私のテキストエディター(Komodo)は、@ Garfieldの推奨のこのバリエーションを最も不愉快なものとは考えていません。

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

6

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

<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>
-->

私が理解している限り、彼は複数行のコメントアウトソリューションを探しています。n行のブロックがある場合、上部と下部(またはおそらく2つ)に行を追加して、作業。ブロック全体を編集する必要はありません。
dionyziz 2013年

6

使えるので <% %>ルビブロックを入れるのに、コメントを入れるのにも確実に使えます。

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

<%
# 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
これは機能しません。ブロックコメント内のルビタグは、外側のブロックを閉じます。
Hovis Biddle 2016

4

= 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 %>

2

以前の回答のいくつかへの単なる補遺。= 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
次のエラーが発生します:「埋め込みドキュメントがファイルの終わりに
キーランアンドリュース

2

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

長所:

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

短所:

  • 奇妙な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
%>

1

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

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


1)そうです、jspコメントの形式が少し異なります。投稿を更新しました。2)IDEAやNetbeansでそのようなものを見つけることができません。これを言っている特定のIDEを覚えていますか?
Nikita Rybak 2010年

1
いいえ、しませんでした。個人的には、RailsプロジェクトにIDEを使用しません。
John Topley、2010年

1

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


はい、しかしこれはまだHTML ルビの両方をコメントアウトしません。
アダマン

うーん...カスタムプラグインの正当な理由のように聞こえます。たぶん、一時停止として、を押しctrl+d<%ブロック内のすべてのErbタグの開始を複数選択してからを押しctrl+shift+/、次にブロック全体でもう一度クリックしてHTMLをコメント化できます。
iono、2015年

1

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

<%if false%><--

stuff to comment out

--><%end%>

利点は次のとおりです。

  • Rubyコードが実行されない

  • IDEでコメントブロックが灰色になっている

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


0

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

<%
=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
<% %w(
  <span title="<%= title %>">hello</span>
) %>

私はあなたの心を吹き飛ばしたと思います!


-4

この問題を解決するために私が見つけた唯一の許容できる解決策は、「<%=」内にスペースを入れて、Rubyコードとして登録されないようにし、ブロック全体をHTMLコメントでコメント化することでした。

このような:

<!--
<p>
  < %= @some_object.some_attribute %>
</p>
<p>
  < %= @some_object.another_attribute %>
</p>
<p>
  < %= @some_object.some_attribute %>
</p>
<p>
  < %= @some_object.some_attribute %>
</p>
-->

はい、スペースを追加するのは面倒です。しかし、これは私がこれまでに見たすべてのソリューションの中で最も煩わしいものではありません。


1
#ドキュメントにルビを送信する代わりに、単に...を追加することもできます。
最大
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.