[Ruby on Rails] Debuck (bindend.pry)

Ziel

Beherrschen Sie die Verwendung von binding.pry

Entwicklungsumgebung

ruby 2.5.7 Rails 5.2.4.3 OS: macOS Catalina

Annahme

Dieses Mal werde ich anhand eines Beispiels erklären, das sogar eine Kommentarfunktion für Beiträge implementiert.

fließen

1 Was ist Debak? 2 Installieren Sie gem'pry-byebug ' Wird mit 3 Controllern verwendet Wird in 4 Ansichten verwendet

Was ist Devak?

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.

Installieren Sie gem'pry-byebug '

gemfile


gem 'pry-byebug'

Terminal


$ bundle install
Ergänzung [pry-byebug] Beenden Sie die Verarbeitung des Programms an der Stelle, an der Sie die Beschreibung hinzugefügt haben. Es ist ein Juwel, das den Zustand zu diesem Zeitpunkt überprüfen kann.

Wird in der Steuerung verwendet

Beschreiben Sie Folgendes an der Stelle, an der Sie die Verarbeitung stoppen möchten.

python


binding.pry

Beispiel für die tatsächliche Verwendung ①

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 (# )> ein und drücken Sie die Eingabetaste. Sie können sehen, dass id = 32 als Parameter von post erhalten werden kann.

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.

  • Geben Sie zum Beenden exit und dann Enter ein.

Beispiel für die tatsächliche Verwendung ②

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.

  • Geben Sie zum Beenden exit und dann Enter ein.

Beispiel für die tatsächliche Verwendung ③

bind.pry kann auch in if-Anweisungen verwendet werden. [2] Geben Sie pry (# )> if @ post.nil? [2] Da sich die Anzeige in pry ändert (# ) * Beschreiben Sie den Inhalt der if-Anweisung zeilenweise.

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>)> 
  • Geben Sie zum Beenden exit und dann Enter ein.
  • Wenn viele Anzeigen vorhanden sind, werden sie zur Hälfte angezeigt. Sie können sie jedoch durch Drücken der Eingabetaste abrufen. Um die Erfassung abzuschließen, drücken Sie q, um den Vorgang abzuschließen.

Wird im Blickfeld verwendet

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.

Zusammenfassung

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