この記事を書くきっかけ
jQueryを書いていると、scriptタグ内でRailsのメソッド(正確にはapplication_helper内のメソッド)を使用したいときがあります。
正しい書き方をしないと正確に呼び出せないため、失敗した書き方と成功した書き方をまとめます。
前提
current_userの属性によってpathを切り替えるメソッドを
def hogehoge_path_for
とし、application_helper.rbに定義します。
application_helper.rb
def hogehoge_path_for
if ...
hoge_path
else
hogehoge_path
end
end
これをとあるviewのscriptタグ内で呼び出します。
let path = hogehoge_path_forの返り値
としたいです。
失敗例1
あるview
<script>
let path = <% hogehoge_path_for %>;
</script>
普通はこう考えるはずですが、これだと呼び出せません。
失敗例2
あるview
<script>
let path = <% hogehoge_path_for %>;
</script>
これも呼び出せません。
失敗例3
escape_javascript
というメソッドを使用します。
なお、これはaliasとしてj
の使用が許されています。
あるview
<script>
let path = <% escape_javascript hogehoge_path_for %>;
</script>
上記は下記と同じです。
あるview
<script>
let path = <% j hogehoge_path_for %>;
</script>
どちらも失敗します。
失敗例4
=をつけます。
あるview
<script>
let path = <%= escape_javascript hogehoge_path_for %>;
</script>
上記は下記と同じです。
あるview
<script>
let path = <%= j hogehoge_path_for %>;
</script>
これもどちらも失敗します。
失敗例5
=を外して、''
で囲います。
あるview
<script>
let path = '<% escape_javascript hogehoge_path_for %>';
</script>
上記は下記と同じです。
あるview
<script>
let path = '<% j hogehoge_path_for %>';
</script>
これもどちらも失敗します。
成功例
=
をつけて''
で囲います!
あるview
<script>
let path = '<%= escape_javascript hogehoge_path_for %>';
</script>
上記は下記と同じです。
あるview
<script>
let path = '<%= j hogehoge_path_for %>';
</script>
これで無事呼び出すことができました。