web-dev-qa-db-ja.com

Slimテンプレート内でHTMLをレンダリングする方法

アイコンが前に付いたリンクをレンダリングしようとしています。 Slim テンプレートエンジンと Bootstrap CSS を使用しています。

通常、これは次の方法で実行できます。

<a href="#"><i class="icon-user"></i> My Profile</a>

Slimのドキュメントによると、==を使用してHTMLをエスケープせずにレンダリングできます。そこで、これをSlimに変換して、次のバリエーションを試しました。

li== link_to "<i class='icon-user'></i> My Profile", current_user
li== link_to "#{'<i class="icon-user"></i>'.html_safe} My Profile", current_user
li= link_to "#{'<i class="icon-user"></i>'.html_safe} My Profile", current_user

すべてのバリエーションは、iタグをエスケープして<a href="/users/1"><i class="icon-user"></i> My Profile</a>をレンダリングしました。

SlimまたはRailsがhtmlをエスケープしないようにするにはどうすればよいですか?

(レール3.2とスリム1.2.1)

15
Mohamad

link_toの結果全体ではなく、link_to引数のHTMLエスケープを無効にします。あなたはhtml_safeにかなり近づいていますが、文字列補間は「HTMLに対して安全」フラグを食いつぶしています。これはうまくいくはずです:

li= link_to '<i class="icon-user"></i> My Profile'.html_safe, current_user
11
mu is too short

これは回答済みですが、実際にHTMLがあり、スリムなテンプレートでレンダリングする場合は、doubleequalを使用してください。

== "<i>test</i>"

と同じになります

= "<i>test</i>".html_safe
11
nroose

または、これを次のように書くこともできます

li
  a href=url_for(current_user)
    i.icon-user My Profile

これは間違いなく少し読みやすいです。

9

それが誰かを助ける場合に備えて、以下でこれに取り組む別の方法があります。ブロックを使用すると、リンク内に含めるより複雑なコードがある場合に特に役立ちます。

li
  = link_to current_user do
    i.icon-user>
    | My Profile
1
Mike