Beherrschen Sie die Verwendung von binding.pry
ruby 2.5.7 Rails 5.2.4.3 OS: macOS Catalina
Dieses Mal werde ich anhand eines Beispiels erklären, das sogar eine Kommentarfunktion für Beiträge implementiert.
1 Was ist Debak? 2 Installieren Sie gem'pry-byebug ' Wird mit 3 Controllern verwendet Wird in 4 Ansichten verwendet
Untersuchen Sie die Fehlerursache (der Fehler tritt möglicherweise nicht auf) und Was Sie tun, um das ideale Verhalten zu erreichen, wird als Debugging bezeichnet.
Wenn die Anwendung einen Fehler auslöst Grundsätzlich wird eine Fehlermeldung ausgegeben. Überprüfen Sie die Fehlermeldung, debuggen Sie sie und beheben Sie die Fehlerursache.
Dieses Mal werde ich bind.pry einführen, eine der Methoden.
gemfile
gem 'pry-byebug'
Terminal
$ bundle install
Beschreiben Sie Folgendes an der Stelle, an der Sie die Verarbeitung stoppen möchten.
python
binding.pry
Terminal
def show
@post = Post.find(params[:id])
@comment = Comment.new
@comments = @post.comments
end
Wenn es eine Beschreibung wie oben gibt, fügen Sie sie wie folgt hinzu.
Terminal
def show
binding.pry
@post = Post.find(params[:id])
@comment = Comment.new
@comments = @post.comments
end
Starten Sie dann den Rails-Server. Wenn Sie dann zur beschriebenen Seite wechseln, sollte der Bildschirm einfrieren. Bitte kehren Sie in diesem Zustand zum Terminal zurück. Dann ist es wie folgt.
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>)>
Geben Sie in diesem Zustand params nach [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>)>
Als nächstes schreiben wir nach dem Controller. Dann konnte ich die Daten von id = 32 erhalten.
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>)>
Wenn Sie weiterhin die Kommentare zu diesem Beitrag sehen möchten, schreiben Sie wie folgt. Dann konnte ich die mit id = 32 verknüpften Kommentarinformationen abrufen.
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>)>
Wenn die gewünschten Parameter zurückgegeben werden, ist dies erfolgreich. Wenn es nicht zurückkommt, ist die Beschreibung falsch und muss überprüft werden.
In ① setze ich es oben, aber dieses Mal werde ich es unten setzen.
Terminal
def show
@post = Post.find(params[:id])
@comment = Comment.new
@comments = @post.comments
binding.pry
end
Starten Sie dann den Rails-Server. Wenn Sie dann zur beschriebenen Seite wechseln, sollte der Bildschirm einfrieren. Bitte kehren Sie in diesem Zustand zum Terminal zurück. Dann ist es wie folgt.
Terminal
31: def show
32: @post = Post.find(params[:id])
33: @comment = Comment.new
34: @comments = @post.comments
=> 35: binding.pry
36: end
Wenn Sie dort @post schreiben, erhalten Sie das gleiche Ergebnis wie in der obigen Beschreibung in Post.find (params [: id]).
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>)>
Auf diese Weise können Sie das Element, das Sie überprüfen möchten, ändern, je nachdem, wo Sie binding.pry ablegen. Es wird auch empfohlen, verschiedene Dinge auszuprobieren.
bind.pry kann auch in if-Anweisungen verwendet werden.
[2] Geben Sie 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>)>
Wenn Sie es in der Ansicht verwenden, beschreiben Sie es an der Stelle, die Sie überprüfen möchten, wie folgt.
python
<% binding.pry %>
Die Verwendung ist die gleiche wie bei der Steuerung. Das zu verwendende Timing wird verwendet, wenn der Inhalt jeder Anweisung überprüft wird.
bind.pry kann die Entwicklung je nach Verwendung erheblich beschleunigen. Besonders für Anfänger ist es leichter zu verstehen, wenn Sie früh lernen können. Wir empfehlen frühes Lernen.
Recommended Posts