Die Ruby on Rails Console (REPL) ist ein nützliches Werkzeug, um schnell Code zu untersuchen oder Ideen auszuprobieren.
Auf die 5 hilfreichsten Tricks wird im Folgenden näher eingegangen.
1. App
Nach dem Starten der Console steht sofort die Variable app zur Verfügung. Sie enthält ein Objekt der Klasse ActionDispatch::Integration::Session. Damit kann auf die Rails Anwendung zugegriffen und zum Beispiel Requests ausgelöst werden:
app.get app.articles_path
# => 200
Und der Response der letzten Anfrage:
app.response.body
# => "<!DOCTYPE html>\n<html lang=\"de\">\n <head> ..."
2. Helper
Sämtliche Rails Helper stehen in der Console ebenfalls zur Verfügung:
helper.link_to 'Alle Artikel', app.articles_path
# => "<a href=\"/articles\">Alle Artikel</a>"
3. Resultat der letzten Anweisung
Das Resultat der letzten Anweisung liegt immer in der Variable _:
Article.last
# => #<Article:0x00000004396418> { :id => 78, ... }
_
# => #<Article:0x00000004396418> { :id => 78, ... }
1
# =>
_
# => 1
4. Default Objekt in Sub-IRB
Standardmäßig ist der Console Kontext main:
article = Article.last
article.title
# => "5 Rails Konsole Tips"
Er läßt sich mit irb aber auch in ein Objekt verschieben:
irb Article.last
title
# => "5 Rails Konsole Tips"
In dem sogenannten Sub-IRB kann auf alle Methoden des Objektes direkt zugegriffen werden.\ Nach dem Verlassen der Sub-IRB, ist man wieder im main Kontext:
exit
=> #<IRB::Irb: @context=#<IRB::Context:0x000000108178f0> ... >
title
# => NameError: undefined local variable or method `title' for main:Object
Natürlich kann die Sub-IRB auch in app verlegt werden:
irb app
get app.article_path(Article.last)
# => 200
5. Rollback Daten mit Sandbox
Beim debuggen von Daten kann es notwendig sein, diese zu manipulieren. Oder es muss eine Operation ausgeführt werden um einen Fehler zu entdecken. Diese Daten dann immer wiederherzustellen für weitere Versuche, kann aufwendig sein.
Dann sollte die Console in einer Sandbox gestartet werden:
rails console production --sandbox
Nach dem Ausführen der Datenoperationen:
article = Article.find 1
# => #<Article:0x00000004143cd8>
article.delete
# => DELETE FROM "articles" WHERE "articles"."id" = $1 [["id", 1]]
Article.find 1
# => ActiveRecord::RecordNotFound: Couldn't find Article with 'id'=1
wird bei Verlassen der Console automatisch ein Rollback ausgeführt, der sämtliche Datenänderungen wieder zurückrollt:
exit
# => ROLLBACK
Die Daten bleiben also in ihrem ursprünglichen Zustand erhalten:
# rails console production
article = Article.find 1
# => #<Article:0x00000003db3848>