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