Rails: controleer uitvoer van padhelper van console

Rails definieert een heleboel magie met benoemde routes die helpers zijn voor je routes. Soms, vooral bij geneste routes, kan het een beetje verwarrend zijn om bij te houden welke URL je krijgt voor een bepaalde routehulpmethode-aanroep. Is het mogelijk om met behulp van de Ruby-console te zien welke link een bepaalde helperfunctie zal genereren? Als ik bijvoorbeeld een benoemde helper zoals post_path(post) geef, wil ik zien welke URL wordt gegenereerd.


Antwoord 1, autoriteit 100%

Je kunt ze direct laten zien met rake routes.

In een Rails-console kun je app.post_pathaanroepen. Dit werkt in Rails ~= 2.3 en >= 3.1.0.


Antwoord 2, autoriteit 85%

u kunt ook

include Rails.application.routes.url_helpers

vanuit een consolesessies om toegang te krijgen tot de helpers:

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

of

Rails.application.routes.url_helpers.users_path

Antwoord 3, autoriteit 7%

In de Rails-console bevat de variabele app een sessieobject waarop u pad- en URL-helpers als instantiemethoden kunt aanroepen.

app.users_path

Antwoord 4, autoriteit 3%

Je kunt altijd de uitvoer van path_helpersin de console controleren. Gebruik gewoon de helper met app

app.post_path(3)
#=> "/posts/3"
app.posts_path
#=> "/posts"
app.posts_url
#=> "http://www.example.com/posts"

Antwoord 5

Onthoud als je route naam-spaced is, zoals:

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

Probeer dan:

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

uitvoer

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>" 

Antwoord 6

Voor Rails 5.2.4.1 moest ik

app.extend app._routes.named_routes.path_helpers_module
app.whatever_path

Other episodes