###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がないからだと思う。