はじめに
本記事は、昨日投稿した続きで、
「binding.pry」の使い方をまとめたものになります。
前回の投稿もご参照ください。
「binding.pry」の目的
たとえ、「binding.pry」が万能だとしても、
確認できることは限られています。
目的(私が思いつくものです。他にもあると思います。)
①paramsの中身の確認
②「binding.pry」の後に、if文があれば、true or falseの指示が出せているかどうか
③エラー内容の確認
④インスタンス変数の中身の確認
結論としては、
何かの中身や結果が期待するものかどうかを調べたい時
エラーの原因はどこにあるのかを探したい時
が目的となります。
何ができる?
ここのコードが間違えているため、このように修正しなさい!!
という直接的にエラーを解決できるものではありません
。
ここではないかという目星をつけ、
「ここは間違えていない!ここも間違えていない!ここは間違っている!」
という風に、選択肢を潰していく
このようなことができます。
指定した場所でエラーが起きるかどうかを確認するもの
です。
どこで使用できる?
コントローラー
でもビュー
でもモデル
でも使用できます。
特にモデルでは、自作のメソッドが役割を果たせているかを確認する際に、
「binding.pry」は多く使用されます。
また、試したいコードの部分の手前に「binding.pry」を置きましょう。
エラー内容の確認
class OrdersController < ApplicationController
def index
@order = Order.new
end
def create
@order = Order.new(order_params)
binding.pry
if @order.valid?
@order.save
return redirect_to root_path
else
render 'index'
end
end
private
def order_params
params.require(:order).permit(:price)
end
end
前回投稿したものを引用しますと、
if @order.valid?
から「binding.pry」はエラーを調べることができます。
エラーがあれば「false」、なければ「true」ということは、前回に投稿しました。
「false」だった場合で、エラーの内容を確認したい時は、
errors.full_messages
を記述しましょう。
[1] pry(#<OrdersController>)> @order.valid?
=> false
[2] pry(#<OrdersController>)> errors.full_messages
=> Price can't be blank
エラーが実際に画面に表示されたときも、
「Price can't be blank」のような文章が現れるはずです。
errors.full_messages
についてはよく使用するので、ここは暗記でも良いのでは?
と思い、私は暗記しました。
終わり
昨日に引き続き「binding.pry」の深堀を行いました。
何一つわからなかった昨日とは大きく成長したように思えます。
今回のように理解していなく、不安な要素は、
理解した上で、深堀することで、
苦手から得意
になると私はそう思います。
どんどん得意を増やします。
引き続きがんばりましょう!!