A

プログラミングの学習記録

【本日の学習内容:共同開発(非同期通信)】

引き続き、共同開発を進めました。

 理解があいまいだった部分を復習しました。

 

・引数の受け渡しの流れの整理

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の組み合わせのレコードを中間テーブルに作成

記述は以下の通り。

 

WatchesController
    current_user.watches.create!(movie_id: @movie.id)

 

参考:https://qiita.com/kazukimatsumoto/items/14bdff681ec5ddac26d1