2009-06-15 9 views
49

いくつかのレールチュートリアルを開始し、いくつかのビューコードブロックがレール内の - %>と%>の違い

<h1><%= @subject.name -%></h1> 

のようなものであることに気付きました。

いくつかの良い構文リファレンスが分かっていれば、それは役に立ちます。

+0

この1つは、参照される前に尋ねられました。私の司会者は彼らが何をしているのかを知っていますが。 – Brettski

答えて

80

追加のダッシュは、ERBが終了タグの後に改行を出力しないようにします。そこにあなたの例では差はませんが、あなたはこのような何かを持っている場合:

<div> 
    Hi 
</div> 

をしていないこの:

<div> 
    <% if true -%> 
    Hi 
    <% end -%> 
</div> 

それは生産ます

<div> 

    Hi 

</div> 
+7

ありがとうございました!私は最初に、特殊文字を許可する検索エンジンを見つけ、次に% - >を検索してこれを見つけました。これが最初に表示されたページです。私はhttp://www.symbolhound.com/を使用しました(そして、私はおそらくこれをかなり頻繁に使用するつもりです。なぜなら、Googleで特別なシンボルを検索することは不可能だからです)。 –

+4

ERBをスタンドアロンのルビスクリプトで使用して、 'trim_mode'を' ERB.new'に渡すことを確認してください。 'ERB.new( 'myfile.erb'、nil、 ' - ')' '-'が' trim_mode'の場合、それ以外はダッシュを受け付けません –

+0

これは ' erb'コマンドラインツール。 @Koenとして。設定された設定トリムモードで問題が解決され、コマンドには設定するオプション( 'erb -T '-'')があります。 – erran

4

あなたはかなりHAMLを使用している場合ERBよりも、あなたのタグの後ろにあるシンボルよりも小さくても大きいシンボルでも同様のことができます。

>は、タグの周囲の空白を削除し、<は空白を削除します。

<div class="float-left"><p> 
    Lorem ipsum dolor sit amet 
</p></div> 

そして...

%left_tag 
%inside> 
%right_tag 

がにコンパイルされています:あなたはHAMLを使用していない場合、それは間違いなくチェックアウトする価値がある

<left_tag /><inside /><right_tag /> 

.float-left< 
    %p 
    Lorem ipsum dolor sit amet 

がにコンパイルされます。

5

%>が不要になる前に-と私はかなり確信しています。

少なくともChromeでは、生成されたhtmlは-%>または%>を使用して同じように見えます。

+0

純粋なRuby 2.1でもRails 4.1でも再現できません。私は '-'や' trim_mode' '<>'(デフォルトでは設定されていないようです)の改行を削除することはできません。 –

3

更新:この回答は間違っていました。https://stackoverflow.com/a/25626629/895245を参照してください。


In Ruby 2。1(必ずしもレールと)、-は、一つに改行削除:

  • が改行が空白が除去されていない>
  • 後の最初の文字でなければならないが
  • 単一の改行を除去する
  • あなたそれを

例を使用するように'-'オプションを渡す必要があります。

require 'erb' 
ERB.new("<%= 'a' %>\nb").result    == "a\nb" or raise 
begin ERB.new("<%= 'a' -%>\nb").result; rescue SyntaxError ; else raise; end 
ERB.new("<%= 'a' %>\nb" , nil, '-').result == "a\nb" or raise 
ERB.new("<%= 'a' -%>\nb" , nil, '-').result == 'ab' or raise 
ERB.new("<%= 'a' -%> \nb" , nil, '-').result == "a \nb" or raise 
ERB.new("<%= 'a' -%>\n b" , nil, '-').result == 'a b' or raise 
ERB.new("<%= 'a' -%>\n\nb", nil, '-').result == "a\nb" or raise 

ドク:http://ruby-doc.org/stdlib-2.1.1/libdoc/erb/rdoc/ERB.html

のRails 4.1のドキュメントこのhttp://api.rubyonrails.org/classes/ActionView/Base.htmlでは、と表示された:で、デフォルトで

しかし、Rails 4.1では、純粋なERBではサポートされていないので、末尾の空白は文書化されているとおりに削除されるため、その他の違いがある可能性があります。

また、改訂された改行は文書化されているとおりに削除されているわけではありません。次のURLで問題を公開しました。https://github.com/rails/rails/issues/16766

+0

ERBとErubisの間のトリムレベルの違いを明らかにしてください:https://gist.github.com/mikecmpbll/72a32f79dc3821e9d2a8 –

+1

正解を指し示す間違った答えをアップアップ: - / – Casper

関連する問題