rails 独学して軽くにちゃんまとめつくる

インターン中大学生のブログ

ぐるぐる回って何をしたいのかが変わってく。今はマッチングサイトを作りたい、もしくは論文のキュレーションサイトかな。

Rails で変数展開したらエスケープされてしまう

もとのコード

<% data = ["first", "second", "third"] %>

<script>
  <%= data %> ;
</script>


<%= data %>

実効結果のコード

<script type="text/javascript">

  // ruby コードを展開するときエスケープされてしまう・・・
   [&quot;first&quot;, &quot;second&quot;, &quot;third&quot;]
</script>

#html の本文に展開したのはエスケープされない
 ["first", "second", "third"] 

と変換されてしまう。 よくわからないのだが、script で展開したrubyの変数は自動的にエスケープされてしまうようだ。この解決策は簡単で、変数展開するときに <%== data %> というように = を2つつけたらいい。

すると <script> ないでもエスケープされずに表示されるのだ。 このようにすれば

<% data = ["first", "second", "third"] %>

<script>
  <%== data %> ;
</script>


<%= data %>

こうやってエスケープされない!!

<script type="text/javascript">

  // ruby コードを展開するときエスケープされなくなった!
  ["first", "second", "third"]   
</script>

#html の本文に展開したのはエスケープされない
 ["first", "second", "third"] 

なぜこうなるのかはわからないが、変数展開でこういうやり方があるのは初めて知った。

こちらのサイトを参考にさせていただきました。 RailsビューのHTMLエスケープは#link_toなどのヘルパーメソッドで解除されることがある