【本日の学習内容:共同開発(非同期通信)】
引き続き、共同開発を進めました。
理解があいまいだった部分を復習しました。
・引数の受け渡しの流れの整理
binding.pryを活用して飛んできている値を確認し、出元を追う。
2: def create
3: binding.pry
=> 4: @movie = Movie.find(params[:movie_id])
5: current_user.watches.create!(movie_id: @movie.id)
6: end
[1] pry(#<WatchesController>)> params
=> <ActionController::Parameters {"controller"=>"watches", "action"=>"create", "movie_id"=>"64"} permitted: false>
[2] pry(#<WatchesController>)> params[:movie_id]
=> "64"
2: def create
3: @movie = Movie.find(params[:movie_id])
4: binding.pry
=> 5: current_user.watches.create!(movie_id: @movie.id)
6: end
[1] pry(#<WatchesController>)> @movie
=> #<Movie:0x00007fa22b4ba0a8
id: 65,
title: "Slackの使い方",
url: "https://www.youtube.com/embed/x_KeaEUr3jo",
created_at: Wed, 19 Aug 2020 20:40:00 JST +09:00,
updated_at: Wed, 19 Aug 2020 20:40:00 JST +09:00,
genre: nil>
・ルーティングのネスト
moviesにwatchesをネストしたが、
ネストすることによって、movies/1/watches のようなURLになるため、
どの動画(movies)に視聴済み(watches)が付いたのか判断できるようになる。
実際、rails routes | grep movie したときに、
以下の movies_watches パスが追加されていることがわかる。
movie_watches DELETE /movies/:movie_id/watches(.:format) watches#destroy
POST /movies/:movie_id/watches(.:format) watches#create
・今ログインしているユーザーのuser_idと「視聴済みボタン」を押した動画のmovie_idの組み合わせのレコードを中間テーブルに作成
記述は以下の通り。
current_user.watches.create!(movie_id: @movie.id)
参考:https://qiita.com/kazukimatsumoto/items/14bdff681ec5ddac26d1