0
0

More than 3 years have passed since last update.

binding.pryを使えるようになりたい!2

Last updated at Posted at 2021-08-02

はじめに

本記事は、昨日投稿した続きで、
「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」の深堀を行いました。
何一つわからなかった昨日とは大きく成長したように思えます。

今回のように理解していなく、不安な要素は、
理解した上で、深堀することで、
苦手から得意になると私はそう思います。

どんどん得意を増やします。
引き続きがんばりましょう!!

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