Ruby
RubyOnRails

〜変数に入っている要素を確認〜 pメソッドでデバッグする(初心者の方向け)

pメソッドとは?

pメソッドは変数の中身が、自分が思っている通りの物であるかを確認するときに使うメソッドです。
rubyに標準で搭載されています。

pメソッド使い方

例えば、このようなメソッドを自作したとします。

example.rb
#モデルの中に定義してます
def user_find(required_name)
 user_found = User.where(username: required_name)
end
example_controller.rb
user = current_user.name
user_find(user)

example_controllerを行った結果、undefined method 'user_find' for nil:NilClass
というエラーメッセージが出てきたとします。
この場合、まずuserがnilということがわかり、またcurrent_user.nameもnilだということがわかります。

じゃあそもそもcurrent_userもnilなのではないかと考えられます。
そういうときに、pメソッドにを使います。

example_controller.rb
p "############"
p current_user
p "#############"
user = current_user.name
user_find(user)

と書きます。
上のpメソッドを埋め込み、もう一度example_controllerを動かします。
ここ結構重要です。pメソッドを書き込んだcontrollerを動かさないと、pメソッドは発動しません。
また、p "#############"で挟んでいるのは、サーバーログのどこからどこまでが、pメソッドの結果になるのかをわかりやすくするためです。
その後、ターミナルでサーバーを見ます。

スクリーンショット 2018-03-10 22.38.31.gif

そうするとこんな感じで、nilだということがわかります。
じゃあここはなぜnilなのかという形で逆算していきます。

コーディングしていると、上のようなエラーは日常茶飯事かと思います。
ただ常に、自分が思い描いている条件が揃っているかを確認する際にはpメソッドはめちゃくちゃ使えます。
思わぬところでのエラーを発見できます。
ぜひ使って見てください!