アイコンが前に付いたリンクをレンダリングしようとしています。 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)
link_to
の結果全体ではなく、link_to
引数のHTMLエスケープを無効にします。あなたはhtml_safe
にかなり近づいていますが、文字列補間は「HTMLに対して安全」フラグを食いつぶしています。これはうまくいくはずです:
li= link_to '<i class="icon-user"></i> My Profile'.html_safe, current_user
これは回答済みですが、実際にHTMLがあり、スリムなテンプレートでレンダリングする場合は、doubleequalを使用してください。
== "<i>test</i>"
と同じになります
= "<i>test</i>".html_safe
または、これを次のように書くこともできます
li
a href=url_for(current_user)
i.icon-user My Profile
これは間違いなく少し読みやすいです。
それが誰かを助ける場合に備えて、以下でこれに取り組む別の方法があります。ブロックを使用すると、リンク内に含めるより複雑なコードがある場合に特に役立ちます。
li
= link_to current_user do
i.icon-user>
| My Profile