かもメモ

自分の落ちた落とし穴に何度も落ちる人のメモ帳

Ruby Slim タグなどを含んだ変数をエスケープせずに出力したい。

Slim テンプレートでの変数の出力の方法は、こんな感じに=で出力することができます。

div
  p= @value

文章中や、属性中に変数展開させる場合は#{変数名}で出力します。

p
  a.btn src="edit/#{@id}" 編集

しかし、上記の方法ではHTMLタグや"などを含んだ文字列を出力しようとするとエスケープされたものが出力されてしまいます。自動的にエスケープしてくれるので便利なのですが、改行がある文章をそのまま出力したいなどといった場合には不都合があります。

EX:

@value = '<b>"タグ"を含んだテキスト。</b>'
p= @value
p 文章中に変数展開「#{@value}

↓ 出力されるHTML

<p>&lt;b&gt;&quot;タグ&quot;を含んだテキスト。&lt;/b&gt;</p>
<p>文章中に変数展開「&lt;b&gt;&quot;タグ&quot;を含んだテキスト。&lt;/b&gt;</p>

エスケープせずに出力する方法

エスケープせずに変数を出力する場合は == で、
エスケープせずに文章中に変数展開をする場合は #{{変数名}} と二重にすれば記述すればOK。

EX:

@value = '<b>"タグ"を含んだテキスト。</b>'
p== @value
p 文章中に変数展開「#{{@value}}

↓ 出力されるHTML

<p><b>"タグ"を含んだテキスト。</b></p>
<p>文章中に変数展開「<b>"タグ"を含んだテキスト。</b></p>

まとめ

エスケープあり エスケープなし
変数出力 = ==
変数展開 #{変数名} #{{変数名}}

 
好んで使ってたSlimと記述方法が似てるpug (旧jade)ではエスケープしない場合は!=!{変数名}だったので、同じだろうと思ってハマってしまいました。
Rubyの学習が全然進んでないので、もくもく会とかに参加しよう…

後、記事と全然関係ないのだけどSublimeTextでRuby書いてると、シンタックスハイライトの処理なのかめちゃくちゃ入力と表示にラグ発生するのだけれど解決方法とかあるのだろうか…?


プログラミング言語 Ruby

プログラミング言語 Ruby