NOUVEAU RÉDACTIONProblèmes avec "link_to"
Avec resources :cases
dans le routes.rb
tous ces assistants de routage fonctionnent comme prévu (c est une instance de l'affaire modèle):
cases_path # Index action
new_case_path # New action
case_path(c) # Show action
edit_case_path(c) # Edit action
Changer routes.rb
à ceci:
scope "/:area" do
resources :cases
end
deux aides de routage Fail (voir erreur ci-dessous):
cases_path # OK
new_case_path # OK
case_path(c) # Fail
edit_case_path(c) # Fail
Pour cela fonctionne je fais besoin de changer les deux aides dans:
cases_path # OK
new_case_path # OK
case_path(c, :area => params[:area]) # OK
edit_case_path(c, :area => params[:area]) # OK
Pourquoi il n'y a pas besoin de donner: zone aux deux premières aides et il est nécessaire pour les deux secondes? Il rend le code source de confusion ...
QUESTION ANCIEN
Dans un premier temps j'ai eu cette routes.rb:
resources :cases
et je pourrais générer des liens de ce type
example.com/cases/3
pour montrer le cas avec ID = 3 avec:
link_to("Show this case", @case)
Je modifié routes.rb à:
scope "/:area" do
resources :cases
end
fin le link_to ci-dessus me donne l'erreur
No route matches {:action=>"show", :controller=>"cases", :area=>#<Case id: 2,
Il semble que les rails ne soit pas la: zone des paramètres automatiquement. Je pouvais résoudre ce problème forçant la zone créant un lien avec
link_to("Show this case", case_path(params[:area], @item))
pour obtenir le lien vers
example.com/area1/cases/3
mais je ne l'aime pas vraiment. Est-ce que je fais quelque chose de mal? Pourquoi les rails amènent le contrôleur et l'action mais oublient la zone?
Cela a fonctionné, merci! – Lucamug
Cela fonctionne très bien dans la portée, mais la liaison à des routes hors de la portée (par exemple, root_path) inclut un paramètre «? Area = 1» comme paramètre de chaîne de requête (puisque le paramètre n'existe pas dans la route). Comment pouvez-vous supprimer le paramètre lors de la liaison en dehors de la portée? – dsample