プログラミング学習 備忘録

Railsを学習していく上での技術メモ。学んだことや解決したエラーなどを記録していきます。

掲示板のブックマーク機能を実装してみた②(エラー解決)

大したことではないけど、pry-byebugを使って非常に綺麗にエラーを解決できたので記念に記事にしました。 自分の成長を実感しました。



ブックマーク解除ボタンを押したところ、下のコードでエラー発生。

NoMethodError in BookmarksController#destroy undefined method `destroy!’ for nil:NilClass

 def destroy
    current_user.bookmarks.find_by(board_id: params[:board_id]).destroy!
    redirect_to boards_path
  end

Nilに向かってdestroyするな!と言われた。 どうやらBookmarkコントローラーのdestroyアクションで、正しくデータを取得できていないらしい。binding.pryを挟んでみる。

[1] pry(#<BookmarksController>)> params
=> <ActionController::Parameters {"_method"=>"delete", "authenticity_token"=>"JVH+0Vm0YzsEIC9rtapl3US/3fkesYufaYbas/XYQQwDdc0gHzEF0e4Q+sdE2f93KFxxcJ+YsaqtEvawFzXG0w==", "controller"=>"bookmarks", "action"=>"destroy", "id"=>"39"} permitted: false>
[2] pry(#<BookmarksController>)> board_id
NameError: undefined local variable or method `board_id' for #<BookmarksController:0x00007fc318f079d0>
from (pry):2:in `destroy'
.
.
.
[5] pry(#<BookmarksController>)> params[:id]
=> "39"
[6] pry(#<BookmarksController>)> params[:board_id]
=> nil

params[:board_id]ではbookmarkテーブルのデータを取得できず、params[:id]なら取得できている。 なのでコードを書き換えてみた。

def destroy
    current_user.bookmarks.find_by(board_id: params[:id]).destroy!
    redirect_to boards_path
  end

すると今度はうまく動いた!ここまで綺麗にエラーを解決できたのは珍しい。 binding.pryの使い方が上手くなってきた気がする。