[Ruby on Rails] Debuck (binding.pry)

Cible

Maîtrisez comment utiliser binding.pry

Environnement de développement

ruby 2.5.7 Rails 5.2.4.3 OS: macOS Catalina

supposition

Cette fois, je vais expliquer en référence à un exemple qui implémente même une fonction de commentaire pour les articles.

couler

1 Qu'est-ce que Debak? 2 Installez gem'pry-byebug ' Utilisé avec 3 contrôleurs Utilisé en 4 vues

Qu'est-ce que Devak?

Recherchez la cause de l'erreur (l'erreur peut ne pas se produire) et Ce que vous faites pour obtenir le comportement idéal s'appelle le débogage.

Lorsque l'application génère une erreur Fondamentalement, un message d'erreur est émis. Vérifiez le message d'erreur, déboguez-le et résolvez la cause de l'erreur.

Cette fois, je présenterai binding.pry, qui est l'une des méthodes.

Installez gem'pry-byebug '

gemfile


gem 'pry-byebug'

Terminal


$ bundle install
Supplément [pry-byebug] Arrêtez de traiter le programme à l'endroit où vous avez ajouté la description, C'est un bijou qui peut vérifier l'état à ce moment-là.

Utilisé dans le contrôleur

Décrivez ce qui suit à l'endroit où vous souhaitez arrêter le traitement.

python


binding.pry

Exemple d'utilisation réelle ①

Terminal


  def show
    @post = Post.find(params[:id])
    @comment = Comment.new
    @comments = @post.comments
  end

S'il existe une description comme ci-dessus, ajoutez-la comme suit.

Terminal


  def show
    binding.pry
    @post = Post.find(params[:id])
    @comment = Comment.new
    @comments = @post.comments
  end

Ensuite, lancez le serveur rails. Ensuite, lorsque vous passez à la page décrite, l'écran devrait se figer. Veuillez retourner au terminal dans cet état. Alors c'est comme suit.

Terminal


    31: def show
 => 32:   binding.pry
    33:   @post = Post.find(params[:id])
    34:   @comment = Comment.new
    35:   @comments = @post.comments
    36: end

[1] pry(#<PostsController>)> 

Dans cet état, tapez les paramètres après [1] pry (# )> et appuyez sur Entrée. Vous pouvez voir que id = 32 peut être obtenu en tant que paramètre de post.

Terminal


    31: def show
 => 32:   binding.pry
    33:   @post = Post.find(params[:id])
    34:   @comment = Comment.new
    35:   @comments = @post.comments
    36: end

[1] pry(#<PostsController>)> params
=> <ActionController::Parameters {"controller"=>"posts", "action"=>"show", "id"=>"32"} permitted: false>
[2] pry(#<PostsController>)> 

Ensuite, écrivons en fonction du contrôleur. Ensuite, j'ai pu obtenir les données de id = 32.

Terminal


[1] pry(#<PostsController>)> params
=> <ActionController::Parameters {"controller"=>"posts", "action"=>"show", "id"=>"32"} permitted: false>
[2] pry(#<PostsController>)> Post.find(params[:id])
  Post Load (3.4ms)  SELECT  "posts".* FROM "posts" WHERE "posts"."id" = ? LIMIT ?  [["id", 32], ["LIMIT", 1]]
  ↳ (pry):2
=> #<Post:0x00007f16b08cfeb0
 id: 32,
 user_id: 2,
 title: "test",
 body: "test",
 created_at: Tue, 08 Sep 2020 06:36:21 UTC +00:00,
 updated_at: Tue, 08 Sep 2020 06:36:21 UTC +00:00,
 post_image_id: nil>
[3] pry(#<PostsController>)> 

Si vous souhaitez continuer à voir les commentaires de cet article, écrivez comme suit. Ensuite, j'ai pu obtenir les informations de commentaire associées à id = 32.

Terminal


[3] pry(#<PostsController>)> Post.find(params[:id]).comments
  CACHE Post Load (0.0ms)  SELECT  "posts".* FROM "posts" WHERE "posts"."id" = ? LIMIT ?  [["id", 32], ["LIMIT", 1]]
  ↳ (pry):3
  Comment Load (2.6ms)  SELECT "comments".* FROM "comments" WHERE "comments"."post_id" = ?  [["post_id", 32]]
  ↳ app/controllers/posts_controller.rb:32
=> [#<Comment:0x00007f16b0af5398
  id: 9,
  user_id: 2,
  post_id: 32,
  comment: "",
  created_at: Thu, 17 Sep 2020 09:52:01 UTC +00:00,
  updated_at: Thu, 17 Sep 2020 09:52:01 UTC +00:00,
  score: 1>]
[4] pry(#<PostsController>)> 

Si les paramètres souhaités sont renvoyés, l'opération réussit. Si elle ne revient pas, la description est incorrecte et doit être revue.

  • Pour quitter, tapez exit puis Enter.

Exemple d'utilisation réelle ②

En ①, je le mets en haut, mais cette fois je vais le mettre en bas.

Terminal


  def show
    @post = Post.find(params[:id])
    @comment = Comment.new
    @comments = @post.comments
    binding.pry
  end

Ensuite, lancez le serveur rails. Ensuite, lorsque vous passez à la page décrite, l'écran devrait se figer. Veuillez retourner au terminal dans cet état. Alors c'est comme suit.

Terminal


    31: def show
    32:   @post = Post.find(params[:id])
    33:   @comment = Comment.new     
    34:   @comments = @post.comments
 => 35:   binding.pry
    36: end

Si vous écrivez @post ici, vous obtiendrez le même résultat que la description dans Post.find (params [: id]) ci-dessus.

Terminal


[1] pry(#<PostsController>)> @post
=> #<Post:0x00007fc2b06fc870
 id: 32,
 user_id: 2,
 title: "test",
 body: "test",
 created_at: Tue, 08 Sep 2020 06:36:21 UTC +00:00,
 updated_at: Tue, 08 Sep 2020 06:36:21 UTC +00:00,
 post_image_id: nil>
[2] pry(#<PostsController>)> 

De cette façon, vous pouvez modifier l'élément que vous souhaitez vérifier en fonction de l'emplacement où vous avez placé binding.pry. Il est également recommandé d'essayer diverses choses.

  • Pour quitter, tapez exit puis Enter.

Exemple d'utilisation réelle ③

binding.pry peut également être utilisé dans les instructions if. [2] Entrez pry (# )> if @ post.nil? [2] Parce que l'affichage passe à pry (# ) * Décrivez le contenu de l'instruction if ligne par ligne.

python


[2] pry(#<PostsController>)> if @post.nil?
[2] pry(#<PostsController>)*   redirect_to new_post_path
[2] pry(#<PostsController>)* else  
[2] pry(#<PostsController>)*   @post
[2] pry(#<PostsController>)* end  
=> #<Post:0x00007fc2b06fc870
 id: 32,
 user_id: 2,
 title: "test",
 body: "test",
 created_at: Tue, 08 Sep 2020 06:36:21 UTC +00:00,
 updated_at: Tue, 08 Sep 2020 06:36:21 UTC +00:00,
 post_image_id: nil>
[3] pry(#<PostsController>)> 
  • Pour quitter, tapez exit puis Enter.
  • S'il y a de nombreux affichages, ils seront affichés à mi-chemin, mais vous pouvez les obtenir en appuyant sur Entrée. Pour terminer l'acquisition, appuyez sur q pour terminer.

Utilisé en vue

Lorsque vous l'utilisez dans la vue, décrivez comme suit à l'endroit que vous souhaitez vérifier.

python


<% binding.pry %>

L'utilisation est la même que celle du contrôleur. Le timing à utiliser est utilisé lors de la vérification du contenu de chaque instruction.

Résumé

binding.pry peut considérablement accélérer le développement en fonction de la manière dont vous l'utilisez. Surtout pour les débutants, si vous pouvez apprendre tôt, ce sera plus facile à comprendre. Nous recommandons l'apprentissage précoce.

Recommended Posts