Kuni-Blog

Webエンジニア目指して勉強中/RUNTEQ 5月生/Ruby on Rails/沖縄出身/23歳

ブックマーク機能のAjax化について

こんばんは、くになかです。

学習したことの備忘録を書いて行きたいと思います。

はじめに

ブックマーク機能のAjax化する際の、javascriptを記載した時、分からなかったメソッドを書き残したいと思います。

JavaScriptのコード

ajax化するには、remote: trueなどもするのですが、今回はjs.erbの記述で詰まったのでそこについて書きます。

create.js.erb
$("#js-bookmark-button-for-board-<%= @board.id %>").replaceWith("<%= j(render('boards/unbookmark', board: @board)) %>”);

jメソッドについて

j(render …) の j は escape_javascriptエイリアスメソッドです。

改行コード、シングルクオート、ダブルクオートの中を、エスケープしてくれるヘルパメソッドです。

使う理由としては、JavaScriptが読み取れる文字列に変換するためと、XSS対策のためだそうです。

今回の場合、render 'boards/unbookmark'なので、 app/views/boards/_unbookmark.html.erbで出力した文字列が入ります。

replaceWithメソッドについて

replaceWithメソッドは、1 回の呼び出しで DOM からコンテンツを削除し、HTML形式の文字列を渡しています。

htmlメソッドは要素をhtmlで返すのに対し、replaceWithメソッドは実際の要素(文字列)を返す感じです。

まとめ

javascriptに関してなれてない部分が多く、メソッドの使い方や文法などに戸惑いました。

ajax化する際やvue.jsなどのフレームワークを使う場合はjavascriptの知識が必須なのでなれておかないとなと思いました。

参考文献

https://api.jquery.com/replaceWith/ https://api.rubyonrails.org/v5.2.4/classes/ActionView/Helpers/JavaScriptHelper.html#method-i-escape_javascript

以上です。最後まで読んでいただきありがとうございます。