Rails Routing Setup
-
28-10-2019 - |
Question
Je suis bloqué sur un problème de routage au sein de l'application d'un Rails.
Ce que je suis en train de réaliser est une URL comme / enregistrement / renouvellement / 1 . L'idée est que cela renouvellement de l'inscription d'un membre avec id = 1.
Donc, pour cette configuration fin I les routes suivantes
routes.rb
match "registration/renew" => "registration#renew"
L'utilisateur arrive à la page d'inscription via un lien de navigation tels que
<%= link_to "Full Member", registration_renew_path(@member) %>
Le problème est que le lien généré sort comme: /registration/renew.1 qui indique que: l'extension de format est en cours de création et en annexe. Ce qui j'ai essayé de faire en option via l'inclusion d'un l'argument répondeur: format selon la règle de correspondance suivante
match "registration/renew(/:id(.:format))" => "registration#new"
mais échoue avec
No route matches {:controller=>"registration", :action=>"renew", :format=>#<Member id: 1,.....
Donc, à ce stade, je revérifié les rails guides, etc, mais ne pouvait toujours pas arriver à générer l'URL que je recherchais.
Seulement quand j'avais les deux règles:
match "registration/renew" => "registration#renew"
match "registration(/:action(/:id(.:format)))" => "registration#renew"
dans le fichier routes serait l'URL / enregistrement / renouvellement / 1 me rendre à la page. Bien que je ne me sentais pas que c'était la bonne solution, bien rangé.
La dernière question (s)
- Quelle devrait être la méthode link_to
- Quelle est l'entrée correcte routes.rb
Merci à l'avance
La solution
Il vous suffit passer args explicitement et définir le nom de cet itinéraire
match "registration(/:action(/:id(.:format)))" => "registration#renew", :as => registration_renew
id seulement
<%= link_to "Full Member", registration_renew_path(:id => @member.id) %>
Avec id et le format
<%= link_to "Full Member", registration_renew_path(:id => @member.id, :format => :xml) %>
Sans id
<%= link_to "Full Member", registration_renew_path %>
Vous n'avez pas besoin de la route sans params dans votre exemple.
Autres conseils
Vous pouvez mentionner le contrôleur et l'action dans la méthode link_to
<%=link_to "Full Member", :controller => "registration", :action => "renew", :id => @member.id %>
S'il vous plaît se référer le tutoriel suivant pour plus d'options.
http://api.rubyonrails.org/ cours / ActionView / Helpers / UrlHelper.html # méthode i-link_to