338 votes

Rails : Vérifier la sortie de l'aide path depuis la console

Rails définit un tas de magie avec des routes nommées qui sont des aides pour vos routes. Parfois, surtout avec des routes imbriquées, il peut être un peu confus de garder la trace de l'URL que vous obtiendrez pour un appel à une méthode d'aide de route donnée. Est-il possible, en utilisant la console Ruby, de voir quel lien une fonction d'aide donnée va générer ? Par exemple, avec un helper nommé comme post_path(post), je veux voir quelle URL est générée.

483voto

Chubas Points 8670

Vous pouvez les montrer avec rake routes directement.

Dans une console Rails, vous pouvez appeler app.post_path . Cela fonctionnera dans Rails ~= 2.3 et >= 3.1.0.

8 votes

Juste pour faire suite à mon propre commentaire, il semble que cela soit possible à partir de la console rails 3, au cas où vous l'utiliseriez. Tout d'abord, collez une fausse requête dans votre objet d'application, en appelant quelque chose comme app.get "/" alors il suffit d'instance_evaluer les méthodes souhaitées, car elles sont maintenant protégées par défaut. Quelque chose comme : app.instance_eval{ post_path(post) }

1 votes

Le commentaire de Chubas ci-dessus fonctionnait dans Rails 3. C'est très utile lors de l'écriture de tests pour ne pas avoir à attendre une minute pour découvrir que la route n'est pas correcte. C'est également très utile pour tester les appels get et post. Vous n'avez pas besoin d'appeler app.get en premier.

7 votes

app.teh_path fonctionne toujours dans Rails 4.0 et est utile pour séparer les chemins du moteur des chemins de l'application principale.

429voto

aghull Points 911

Vous pouvez également

include Rails.application.routes.url_helpers

à l'intérieur d'une session de console pour accéder aux aides :

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

ou

Rails.application.routes.url_helpers.users_path

5 votes

C'est beaucoup plus facile que la solution ci-dessus.

2 votes

À mon avis, c'est la bonne réponse à la question initiale.

0 votes

Ceci devrait être la meilleure réponse IMO

35voto

user3622458 Points 11

Dans la console Rails, la variable app contient un objet de session sur lequel vous pouvez appeler les aides path et URL en tant que méthodes d'instance.

app.users_path

20voto

Deepak Mahakale Points 13858

Vous pouvez toujours vérifier la sortie de path_helpers en console. Il suffit d'utiliser l'aide avec app

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

app.posts_path
#=> "/posts"

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

4voto

Arup Rakshit Points 50675

Rappelez-vous que si votre itinéraire est espacé d'un nom, comme :

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

Essayez alors :

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

sortie

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X