Maîtrisez comment utiliser binding.pry
ruby 2.5.7 Rails 5.2.4.3 OS: macOS Catalina
Cette fois, je vais expliquer en référence à un exemple qui implémente même une fonction de commentaire pour les articles.
1 Qu'est-ce que Debak? 2 Installez gem'pry-byebug ' Utilisé avec 3 contrôleurs Utilisé en 4 vues
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.
gemfile
gem 'pry-byebug'
Terminal
$ bundle install
 Décrivez ce qui suit à l'endroit où vous souhaitez arrêter le traitement.
python
binding.pry
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 (# 
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.
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.
binding.pry peut également être utilisé dans les instructions if.
[2] Entrez pry (# 
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>)> 
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.
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