2017-09-14 2 views
0

Je donne les résultats suivants:Comment créer un chemin GET singulier pour une ressource incluant des aides?

routes.rb
resources :splashes, only: [:index, :create, :destroy] 
get '/splash', to: 'splashes#index' 

>rake routes | grep splash 
      splashes GET /splashes(.:format)         splashes#index 
         POST /splashes(.:format)         splashes#create 
       splash DELETE /splashes/:id(.:format)        splashes#destroy 
         GET /splash(.:format)         splashes#index 

Cependant, lorsque je tente d'utiliser splash_url, il génère http://localhost:3000/splashes/1.

J'ai essayé

get '/splash', to: 'splashes#index', as: 'splash' 

Mais il a donné

rake routes | grep splash
rake aborted!
ArgumentError: Invalid route name, already in use: 'splash' You may have defined two routes with the same name using the :as option, or you may be overriding a route already defined by a resource with the same naming. For the latter, you can restrict the routes created with resources as explained here: http://guides.rubyonrails.org/routing.html#restricting-the-routes-created

J'ai essayé d'utiliser le resource singulier, mais il ne génère pas une action #index, et vous ne pouvez pas supprimer une touche spécifique rangée.

+0

Essayez de changer 'ressources: projections, seulement: [: index, : create,: destroy] 'à' resources: splashes, seulement: [: create,: destroy] ' – Pavan

+0

D'abord, je ne comprends pas l'utilisation d'une * ressource singulière * pour une action' index' qui aura un ** collection de ressources ** – Pavan

+0

@Pavan 1er commentaire: Cela n'a pas créé d'assistant '* _url' pour le chemin GET. 2ème commentaire: C'est une page _splash_, une page _landing_. Les éclaboussures n'ont aucun sens pour les humains ou les spécialistes du marketing, mais c'est ainsi que la table et le contrôleur sont nommés. C'est pour la génération de leads. Aucun enregistrement ne sera affiché. – Chloe

Répondre

1

Il suffit de placer vos itinéraires singuliers se déclaration avant la déclaration ressources,

get '/splash', to: 'splashes#index' 
resources :splashes, only: [:index, :create, :destroy] 

Maintenant, les déroutes de râteau donnera à votre résultat ci-dessous,

splash GET /splash(.:format)        splashes#index 
splashes GET /splashes(.:format)       splashes#index 
     POST /splashes(.:format)       splashes#create 
     DELETE /splashes/:id(.:format)      splashes#destroy 

Par cette approche ci-dessus le supprime et obtient les itinéraires sont remplacés en fonction de la séquence de définition, car ils ont les mêmes assistants nommés spash_path. Alors, je vous suggère d'ajouter à la coutume aide nommée get/Spash routes comme ci-dessous,

resources :splashes, only: [:index, :create, :destroy] 
get '/splash', to: 'splashes#index', as: 'splash_index' 

Donc, maintenant, vous obtiendrez un des itinéraires nommés distincts de splash_index pour votre itinéraire personnalisés. Il y a une autre solution aussi,

resources :splashes, only: [:index, :create, :destroy] 
resources :splash, only: [:index], controller: :splashes 

Alors, que vous obtiendrez une autre aide nommée pour vos /Spash itinéraires,

splashes GET /splashes(.:format)       splashes#index 
     POST /splashes(.:format)       splashes#create 
splash DELETE /splashes/:id(.:format)       splashes#destroy 
splash_index GET /splash(.:format)       splashes#index 
+0

Wow cela fonctionne, mais maintenant les liens DELETE ne fonctionnent pas. 'link_to 'Delete', splash_path (lead), méthode:: delete' donne' http: // localhost: 3000/splash.1'. – Chloe

+0

Ouais, je vois les routes supprimer et obtenir sont remplacées en fonction de la séquence de définition, car ils ont tous les deux les mêmes assistants nommés spash_path. Donc, je vous suggère de définir une route nommée pour "get/spash" et d'utiliser cette aide pour obtenir votre o/p attendu. J'ai juste mis à jour la réponse aussi. – Mohanraj

+0

Merci! J'aime la 2ème voie mais utilisée la 1ère voie puisque c'est plus proche de ce que j'ai. – Chloe