2010-06-23 4 views
11

je les itinéraires suivants mis en place dans mon dossier routes.rb:Rails ne tient pas compte route de collecte et va de pair avec l'action show au lieu

resources :people do 
    collection do 
    get :search 
    end 
end 

Quand je fais une action get sur l'url: http://localhost:3000/people/search.json?term=stepeb, les rapports de serveur qu'il répond avec l'action show, avec le paramètre term correct, mais possède également un paramètre id, défini sur "search".

Le problème, comme je le vois, sont les deux urls l'url show serait:

/people/:id 

et je crois que le routeur est correspondant à cette voie avant qu'il ne soit à/personnes/recherche

Si tel est le cas, comment les routes basées sur la collection fonctionneraient-elles? Ne seraient-ils pas tous attrapés par l'action de spectacle?

La partie pertinente des routes râteau est la suivante:

search_people GET  /people/search(.:format)               {:action=>"search", :controller=>"people"} 
            GET  /people(.:format)                {:action=>"index", :controller=>"people"} 
           people POST  /people(.:format)                {:action=>"create", :controller=>"people"} 
          new_person GET  /people/new(.:format)               {:action=>"new", :controller=>"people"} 
            GET  /people/:id(.:format)               {:action=>"show", :controller=>"people"} 
            PUT  /people/:id(.:format)               {:action=>"update", :controller=>"people"} 
           person DELETE /people/:id(.:format)               {:action=>"destroy", :controller=>"people"} 
         edit_person GET  /people/:id/edit(.:format)              {:action=>"edit", :controller=>"people"} 
+2

Je ne sais pas quel est le problème, mais cela devrait certainement fonctionner comme prévu. (Je me demande si le format .json pose des problèmes.) Pouvez-vous nous donner la sortie de 'rake routes'? –

+0

J'ai ajouté .json quand je l'ai vu ne fonctionne pas comme prévu. N'a pas fait la différence. – midas06

Répondre

21

Doh, oubliez celui-ci. Il se avère que j'avais une ressource en double: les gens s'alignent en haut du fichier des routes. Rails frappait le premier. Il me semble qu'il devrait y avoir une vérification de la définition de route en double là-bas.

+0

Enregistré ma journée. Dans routes.rb avec plus de 1000 lignes :) –

+0

Merci midas .. Suppression des ressources en double et son fonctionnement génial. Je me débattais depuis hier. Merci encore une fois :) –

+0

Génial, merci !!! – astgtciv

0

Quelle version de Rails vous utilisez? Essayez de créer une application de test avec juste le code que vous avez fourni ici et voyez si cela fonctionne. Il y a probablement quelque chose d'autre qui provoque un conflit que vous n'avez pas mentionné.

En utilisant votre code sur Rails 3.0.0beta4 a produit les résultats souhaités:

Started GET "/people/search.json?term=boo" for 192.168.1.2 at 2010-06-23 03:39:26 -0400 
    Processing by PeopleController#search as JSON 
    Parameters: {"term"=>"boo"} 
Completed in 49ms 

Voici mes itinéraires fichier:

resources :people do 
    collection do 
     get :search 
    end 
    end 

J'ai un people_controller.rb avec une méthode de recherche définie.

+0

Je cours sur les rails de bord maintenant, mais j'ai aussi essayé sur beta 4 ... – midas06

0

J'ai également eu un problème similaire. Selon votre exemple mon routes.rb ressemblait à ce

resources :people 

... 

resources :people do 
    collection do 
     get :search 
    end 
    end 

changé pour:

resources :people do 
    collection do 
     get :search 
    end 
    end 

... 

resources :people 

et je peux accéder à la collection ... BTW, est-ce le bon moyen d'ajouter des itinéraires? C'est-à-dire que c'est un bon style de simplement ajouter une nouvelle route lorsque vous ajoutez une action à un contrôleur et que vous laissez les "anciennes" ressources: les gens aiment ça?

+0

Je sais que c'est vieux, mais vous êtes essentiellement en train d'ajouter des doublons la 2ème fois. – bradlis7

Questions connexes