17

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

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

<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

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

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

(スリム1.2.1のレール3.2)

4

5 に答える 5

15

これは回答済みですが、実際にいくつかの html があり、それをスリムなテンプレートでレンダリングしたい場合は、double equal を使用してください。

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

と同じになります

= "<i>test</i>".html_safe
于 2015-12-03T00:53:16.847 に答える
13

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

li= link_to '<i class="icon-user"></i> My Profile'.html_safe, current_user
于 2012-06-11T22:44:20.917 に答える
10

Alternatively, you could write this as

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

which arguably is a little easier to read.

于 2013-03-22T10:19:22.753 に答える
1

誰かに役立つ場合に備えて、これに取り組む別の方法があります。ブロックの使用は、リンク内に含めるコードがより複雑な場合に特に便利です。

li
  = link_to current_user do
    i.icon-user>
    | My Profile
于 2015-11-02T06:46:58.960 に答える