A

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

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

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

今日も非同期通信の実装に取り組みました。

質問に答えていただいたことで前進しましたが、

まだ不具合が起きています。 

 

 

・「視聴済みにする」ボタンを押す(1回目)

非同期で「視聴済みを解除 」ボタンに切り替わる

・「視聴済みを解除 」ボタンを押す(1回目)

非同期で「視聴済みにする」ボタンに切り替わる

・「視聴済みにする」ボタンを押す(2回目)

非同期で「視聴済みを解除 」ボタンに切り替わらない

 

おかしいと思い、手動でページを再読み込みすると、

動画教材ページから、先頭の動画が1つ消えてしまっていました。(何度か同じことをしたので、現在複数の動画が消えてしまっています。)

そこでwatchesコントローラーを見ると以下のようになっており、

class WatchesController <  ApplicationController

  def create

    @movie = Movie.find(params[:movie_id])

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

  end

 

  def destroy

    @movie = Movie.find(params[:movie_id])

    @movie.destroy!

  end

end

消してはいけないところをdestroyしてしまっているのが原因だと思いました。

def create

    @movie = Movie.find(params[:movie_id])←destroyアクションで消してはいけない

    current_user.watches.create!(movie_id: @movie.id)←destroyアクションで消したい

  end

 

そこでdestroyアクションを修正したのですが、以下のような動きになってしまいます。

 

 

 

・「視聴済みにする」ボタンを押す(1回目)

非同期で「視聴済みを解除 」ボタンに切り替わる

・「視聴済みを解除 」ボタンを押す(1回目)

非同期で「視聴済みにする」ボタンに切り替わらない

・手動でページを再読み込みし、「視聴済みを解除 」ボタンを押しても「視聴済みにする」ボタンに切り替わらない

 

・試したこと1

def destroy

    @movie = current_user.watches.find(movie_id: params[:movie_id])

    @movie.destroy!

end

 

・試したこと2

def destroy

    @movie = Movie.find(params[:movie_id])

    @movie = current_user.watches.find(movie_id: @movie.id)

    @movie.destroy!

end

 

・試したこと3

def destroy

    @movie = Movie.find(params[:movie_id])

    @movie = Movie.find(movie_id: @movie.id)

    @movie.destroy!

  end

 

ここでmovieではなくwatchのほうを消さなければいけないというのがわかり、

以下のように修正したが実現できず。

・試したこと1

def destroy

    @movie = Watch.find(params[:movie_id])

    @movie.destroy!

end

 ・試したこと2

def destroy

    @movie = Watch.find(movie_id: params[:movie_id])

    @movie.destroy!

end

 

なかなか実現できないけど、

強力なメンターさんがいますし、

楽しいので

諦めません!!