0
0

More than 1 year has passed since last update.

railsチュートリアル第七章 debuggerメソッド

Posted at

debuggerメソッド

アプリケーションの振る舞いを理解するためにdebugメソッドが役に立つことを学びました。
しかし、もっと`直接的にデバッグする方法もあります。
それがbyebug gemによるdebuggerメソッドです。
debuggerメソッドを実際にアプリケーションに差し込んで確かめてみましょう。

debuggerをUsersコントローラに差し込む

app/controllers/users_controller.rb

class UsersController < ApplicationController

  def show
    @user = User.find(params[:id])
    # データベースからユーザー情報を取り出す
    debugger
    # rails sにデバックが表示される
  end

  def new
  end
end

debuggerメソッドを差し込んだら、ブラウザから /users/1 にアクセスし、Railsサーバーを立ち上げたターミナルを見てみましょう。byebugプロンプトが表示されているはずです。

[3, 12] in /home/ubuntu/environment/sample_app/app/controllers/users_controller.rb
    3:   def show
    4:     @user = User.find(params[:id])
    5:     # データベースからユーザー情報を取り出す
    6:     debugger
    7:     # rails sにデバックが表示される
=>  8:   end
    9:   
   10:   def new
   11:   end
   12: end

このプロンプトではRailsコンソールのようにコマンドを呼び出すことができて、アプリケーションのdebuggerが呼び出された瞬間の状態を確認することができます。

(byebug) @user.name
"Michael Hartl"
(byebug) @user.email
"michael@example.com"
(byebug) params[:id]
"1"

なお、Ctrl-Dを押すとプロンプトから抜け出すことができます。
また、デバッグが終わったらshowアクション内のdebuggerの行を削除してしまいましょう。

debuggerをUsersコントローラーから取り外す

class UsersController < ApplicationController

  def show
    @user = User.find(params[:id])
    # データベースからユーザー情報を取り出す
  end

  def new
  end
end

今後Railsアプリケーションの中でよく分からない挙動があったら、上のようにdebuggerを差し込んで調べてみましょう
トラブルが起こっていそうなコードの近くに差し込むのがコツです。
byebug gemを使ってシステムの状態を調査することは、アプリケーション内のエラーを追跡したりデバッグするときに非常に強力なツールになります。

演習

1.showアクションの中にdebuggerを差し込み(リスト 7.6)、ブラウザから /users/1 にアクセスしてみましょう。その後コンソールに移り、putsメソッドを使ってparamsハッシュの中身をYAML形式で表示してみましょう。ヒント: 7.1.1.1の演習を参考にしてください。その演習ではdebugメソッドで表示したデバッグ情報を、どのようにしてYAML形式で表示していたでしょうか?

(byebug) a = params
<ActionController::Parameters {"controller"=>"users", "action"=>"show", "id"=>"1"} permitted: false>
(byebug) puts a.to_yaml
--- !ruby/object:ActionController::Parameters
parameters: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
  controller: users
  action: show
  id: '1'
permitted: false
nil

2.newアクションの中にdebuggerを差し込み、/users/new にアクセスしてみましょう。@userの内容はどのようになっているでしょうか? 確認してみてください。

(byebug) @users
nil

多分newメソッドに@userがないからだと思う。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0