ブックマークボタンのajax化について
どうもどハマりエンジニアです。
本日はajaxについて説明してくよ!
ajaxとは、Asynchronous JavaScript + XML の略で、非同期通信と呼ばれる通信方法のことを指す。
- remote: trueを指定する方法
- JSファイルに任意のタイミングでajax処理を発火させるように記述を施す方法
今回はremote:trueを使い実装していく。
<処理の流れ>
リンクボタンをクリックした時、ルーティングを経由してアクションに、remote:trueオプション付きで遷移する。いつもならhtml.erbにいくが、今回はremote:trueに設定しているので、html.erbにいくのではなく、js.erbに向かうことになる。
ではここからはブックマークをajax化させて処理を書いていく
remote:trueに直していく
(_unbookmark.html.erb)
(_bookmark.html.erb)
まずはremote:trueを追加する。
idは必ず一つのhtmlの中では被らないようにしないといけない!
ブックマークのコントローラを修正していく
(bookmarks_controller.rb)
ユーザーモデルにメソッドを作ろう!(コントローラーに明示的に何をしているかわかるように)
(user.rb)
一つ目のメソッドは、これは「ブックマークをする」という動作を明示的に書くことによって可読性を高めるために作成したメソッド。もし一つ上のコントローラにて別の書き方をするならば、
def create
board = Board.find(params[:board_id])
Bookmark.create(user: current_user, board: board)
# 省略
end
このように書くことが出来るとのこと。
つまりこれは「bookmark_boards << board」はBookmark.create 的な感じかな。難しいよ・・・
あとはjs.erbを作っていこう
(views/bookmarks/create.js.erb)
上段はviewで作成したid
下段は入れ替わり後に表示するテンプレート
ちなみに入れ替わり後のテンプレートはこれ
fas,starは色が塗ってある星マーク。
つまり色なしから色ありに変わるということ。
逆にdestroyのコードも作っていこう。
(views/bookmarks/destroy.js.erb)
これはcreateとほぼ同じである。
以上でajax処理が出来た!
正直他のパターンを複数やらないとわからないかもしれない・・・
ご視聴ありがとうございました。