5 Rails Konsole Tricks

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>