掲示板のブックマーク機能を実装してみた②(エラー解決)
大したことではないけど、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の使い方が上手くなってきた気がする。