Réorganiser parties du résultat d'URL à partir link_to dans Rails
-
23-10-2019 - |
Question
Voici comment je le fais maintenant:
link_to "Profile", :controller => "profiles", :action => "asked", :id => @profile
# => <a href="/profiles/asked/1">Profile</a>
Est-il plus logique pour l'URL à <a href="/profiles/1/asked">Profile</a>
? Profile 1
a demandé un certain nombre de question
s, il est plus logique de moi l'URL de ressembler à:. /:controller/:id/:action
Si vous êtes d'accord, comment puis-je y parvenir?
Si vous n'êtes pas d'accord, s'il vous plaît laissez-moi savoir pourquoi. (Je suis nouveau à Ruby on Rails, donc je suis toujours se habituer aux conventions MVC).
Un conseil serait génial!
La solution
Oui, vous pouvez! Tel est le cas d'un itinéraire nommé! Tout ce que vous avez à faire est, dans votre route.rb ajouter ce lien:
map.asked 'profiles/:id/asked', :controller => 'profiles', :action => 'asked'
Cette route peut être invoquée avec asked_path (: id => @profile) Il suffit de changer votre link_to dans les vues à:
link_to "Profile", asked_path(:id => @profile)
Je ne mérite pas un upvote pour ce que je viens de tirer dehors du fichier routes.rb lui-même. Si vous avez regardé attentivement le autogénérés routes.rb vous verrez ceci:
# Sample of named route:
# map.purchase 'products/:id/purchase', :controller => 'catalog', :action => 'purchase'
# This route can be invoked with purchase_url(:id => product.id)
Si vous voulez le rendre plus générique, je l'ai pas essayé .. mais je pense que cela devrait fonctionner quand même:
map.routeany ":controller/:id/:action"
et dans la vue:
link_to "Route to something...", routeany_path(:controller => "somecontroller", :action => "someaction", :id => @somecontroller)
Quoi qu'il en soit, cheers! :)