Schienen: Überprüfen Sie die Ausgabe des Pfadhelfers von der Konsole

288

Rails definiert eine Menge Magie mit benannten Routen, die Helfer für Ihre Routen sind. Insbesondere bei verschachtelten Routen kann es manchmal etwas verwirrend sein, zu verfolgen, welche URL Sie für einen bestimmten Aufruf der Routenhilfemethode erhalten. Ist es möglich, mithilfe der Ruby-Konsole zu sehen, welchen Link eine bestimmte Hilfsfunktion generiert? Bei einem benannten Helfer wie post_path (post) möchte ich beispielsweise sehen, welche URL generiert wird.

Derek Thurn
quelle

Antworten:

421

Sie können sie rake routesdirekt mit zeigen .

In einer Rails-Konsole können Sie anrufen app.post_path. Dies funktioniert in Rails ~ = 2.3 und> = 3.1.0.

Chubas
quelle
7
Nur in einer Fortsetzung meines eigenen Kommentars scheint dies über die Rails 3-Konsole möglich zu sein, falls Sie diese verwenden. Fügen Sie zunächst eine gefälschte Anfrage in Ihr App-Objekt ein, indem Sie so etwas wie app.get "/" dann nur instance_eval die gewünschten Methoden aufrufen , da diese jetzt standardmäßig geschützt sind. So etwas wie: app.instance_eval{ post_path(post) }
Chubas
Der obige Kommentar von Chubas hat in Rails 3 funktioniert. Dies ist sehr nützlich, wenn Sie Tests schreiben, damit ich nicht 1 Minute warten muss, um herauszufinden, dass die Route nicht korrekt ist. Außerdem ist es großartig, Anrufe zu testen und zu posten. Sie müssen app.get nicht zuerst aufrufen.
B Sieben
7
app.teh_pathfunktioniert immer noch in Rails 4.0 und ist nützlich, um Engine-Pfade von Hauptanwendungspfaden zu trennen.
Nurettin
5
Wenn Sie beispielsweise eine Engine mount Spree::Core::Engine, :at => '/'montieren, greifen Sie über den Motornamen auf die Pfade zu , z app.spree_core_engine.some_path. Oder wenn der "Motorname" so konfiguriert ist, dass er etwas anderes wie in diesem Code ist, würden Sie dies tun app.spree.some_path.
Jordan Brough
Ich musste den hostParameter wie app.article_url(my_article, host: 'mydomain.com')
folgt
352

du kannst auch

include Rails.application.routes.url_helpers

aus einer Konsolensitzung heraus, um auf die Helfer zuzugreifen:

url_for controller: :users, only_path: true
users_path
# => '/users'

oder

Rails.application.routes.url_helpers.users_path
aghull
quelle
4
Dies ist viel einfacher als die obige Lösung IMO
Andrew
2
Dies ist meiner Meinung nach die richtige Antwort auf die ursprüngliche Frage
nemesisdesign
Dies sollte die beste Antwort sein IMO
Luke
4
Ich kann mir nicht die Mühe machen, mich daran zu erinnern, also komme ich alle paar Tage hierher zurück, um zu kopieren / einzufügen. Vielen Dank.
Spencer
1
Könnten Sie nicht auch die url_helpers direkt von der Konsole aus referenzieren, wie Rails.application.routes.url_helpers.users_path?
TheMadDeveloper
25

In der Rails-Konsole enthält die Variablen-App ein Sitzungsobjekt, für das Sie Pfad- und URL-Helfer als Instanzmethoden aufrufen können.

app.users_path
user3622458
quelle
11

Sie können die Ausgabe path_helpersin der Konsole jederzeit überprüfen . Verwenden Sie einfach den Helfer mitapp

app.post_path(3)
#=> "/posts/3"

app.posts_path
#=> "/posts"

app.posts_url
#=> "http://www.example.com/posts"
Deepak Mahakale
quelle
2

Denken Sie daran, wenn Ihre Route einen Namensabstand hat.

product GET  /products/:id(.:format)  spree/products#show

Dann versuche es :

helper.link_to("test", app.spree.product_path(Spree::Product.first), method: :get)

Ausgabe

Spree::Product Load (0.4ms)  SELECT  "spree_products".* FROM "spree_products"  WHERE "spree_products"."deleted_at" IS NULL  ORDER BY "spree_products"."id" ASC LIMIT 1
=> "<a data-method=\"get\" href=\"/products/this-is-the-title\">test</a>" 
Arup Rakshit
quelle
1
Danke für das spreeBeispiel, du bist ein Engel, der vom Himmel gefallen ist.
Bonafernando