Rotaie: controlla l'output dell'helper di percorso dalla console


288

Rails definisce un mucchio di magia con percorsi denominati che creano aiutanti per i tuoi percorsi. A volte, specialmente con le rotte nidificate, può diventare un po 'confuso tenere traccia dell'URL che riceverai per una determinata chiamata del metodo dell'helper di rotta. È possibile, utilizzando la console Ruby, vedere quale collegamento genererà una determinata funzione di supporto? Ad esempio, dato un helper denominato come post_path (post), voglio vedere quale URL viene generato.

Risposte:


422

Puoi mostrarli rake routesdirettamente con .

In una console Rails, puoi chiamare app.post_path. Questo funzionerà in Rails ~ = 2.3 e> = 3.1.0.


7
Solo in seguito al mio commento, sembra che ciò sia possibile dalla console di rails 3, nel caso in cui lo stiate utilizzando. Innanzitutto, inserisci una richiesta falsa nell'oggetto app, chiamando qualcosa come app.get "/" quindi solo istanza_eval i metodi desiderati, poiché ora sono protetti per impostazione predefinita. Qualcosa del tipo: app.instance_eval{ post_path(post) }
Chubas,

Il commento di Chubas sopra ha funzionato in Rails 3. Questo è molto utile quando si scrivono i test, quindi non devo aspettare 1 minuto per scoprire che il percorso non è corretto. Inoltre, è ottimo per testare le chiamate ricevute e postate. Non è necessario chiamare prima app.get.
B Seven,

7
app.teh_pathfunziona ancora in Rails 4.0 ed è utile per separare i percorsi del motore dai percorsi principali dell'applicazione.
Nurettin,

5
Se stai montando un motore, ad esempio mount Spree::Core::Engine, :at => '/', accederai ai percorsi tramite il nome del motore, ad esempio app.spree_core_engine.some_path. Oppure, se "nome_motore" è configurato per essere qualcosa di diverso come in questo codice , lo faresti app.spree.some_path.
Jordan Brough,

Ho dovuto aggiungere il hostparametro in questo modo:app.article_url(my_article, host: 'mydomain.com')
Besi

352

Puoi anche

include Rails.application.routes.url_helpers

dall'interno di una console sessioni per accedere agli helper:

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

o

Rails.application.routes.url_helpers.users_path

4
Questo è molto più semplice della soluzione di cui sopra IMO
Andrew

2
questa è la risposta giusta alla domanda originale secondo me
nemesisdesign

Questa dovrebbe essere la migliore risposta IMO
Luca

4
Non posso preoccuparmi di ricordarmelo, quindi torno qui ogni due giorni per copiare / incollare. Grazie.
Spencer,

1
Non potresti anche fare riferimento a url_helpers direttamente dalla console, come Rails.application.routes.url_helpers.users_path?
TheMadDeveloper

25

Nella console di Rails, l'app variabile contiene un oggetto sessione su cui è possibile chiamare helper percorso e URL come metodi di istanza.

app.users_path

11

Puoi sempre controllare l'output di path_helpersin console. Basta usare l'helper conapp

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

app.posts_path
#=> "/posts"

app.posts_url
#=> "http://www.example.com/posts"

2

Ricorda se il percorso è spaziato dal nome, ad esempio:

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

Quindi prova:

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

produzione

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

1
Grazie per l' spreeesempio, sei un angelo caduto dal cielo.
bonafernando,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.