🦘

Rails デバッグ

2023/04/17に公開

デバッグとは

エラーの原因を調査して、仕様に基づく動作を実現させるために行うことをデバッグと言う。

エラーメッセージを基にデバッグを行い、原因を調査して直していく。
エラー画面は表示されないが、仕様に基づく動作をしない場合にもデバッグを行う。

デバッグのやり方は複数存在する👀

デバッグツールを使用

デバッグをするときに有効な道具(ツール)
Railsにデフォルトで導入されている「byebug」というツールについて

byebugの使い方

byebugは使いたい部分に直接「byebug」と記入すると使用することができる!

例えばindexアクション内で該当の変数の中身を見たい場合には以下のように記述する。

def index
    @lists = List.all
    byebug
end

基本的にbyebugは、中身を見たい変数の下に記述するという考えでOK!

この状態で再度/listsのURLにアクセスすると、画面が固まる!
この際にターミナルを見て見る!

byebugを記入すると、この段階で処理を止めることができ、
上の例だとindexアクションの1行目の処理@lists = List.allだけが実行済みになっている状態。

この状態で@listsの中身に何が入っているか見るためにターミナルに以下を入力!

@lists

そうすると
見やすく改行したバージョンだが、test_titleのデータとtest_title2のデータが入っていることがわかる。

#<ActiveRecord::Relation [
    #<List
        id: 1,
        title: "test_title", 
        body: "test_body", 
        created_at: "2023-02-09 12:14:56.609984000 +0000", 
        updated_at: "2023-02-09 12:14:56.609984000 +0000"
     >, 
     #<List
        id: 2, 
        title: "test_title2", 
        body: "test_body2", 
        created_at: "2023-02-09 12:14:56.629871000 +0000", 
        updated_at: "2023-02-09 12:14:56.629871000 +0000"
      >
]>

このようにbyebugを使用すると変数の中身を見ることができる。

byebugの終了方法

exit

「byebug」の記述を削除
再度rails sによってサーバーを再起動


今日の初歩的なミス

def update
    @user = User.find(params[:id])
    if @user.update(user_params)
      redirect_to user_path(@user.id), notice: "You have updated user successfully."
    else
      render :edit
    end
  end

redirect_to
のパスをuser_pathではなく、users_path(@user.id)にしてしまっていたので
変なパスになってしまっていた!!


今日は昨日からAWSがめちゃくちゃ重くなって作業どころじゃなかった、、🥲
VSCに移行しようとしてるけど環境構築につまづいていて
時間溶けた🥲iTermもぶっ壊れてて直すのに時間相当使っちゃった
思うように進めず残念な日だったがとりあえず明日からまた1週間頑張ろう💪🏻

Discussion