2010-06-23 12 views
11

tengo las siguientes rutas establecidas en mi archivo routes.rb:rieles ignora ruta de recolección y se va con acción show en lugar

resources :people do 
    collection do 
    get :search 
    end 
end 

Cuando hago una acción de conseguir en la url: http://localhost:3000/people/search.json?term=stepeb, los informes de servidor que está respondiendo con la acción de mostrar, con el parámetro de término correcto, pero también tiene un parámetro de id, establecido en "buscar".

El problema, como yo lo veo, son las dos direcciones URL el espectáculo URL sería:

/people/:id 

y creo que el router está emparejando esa ruta antes de que llegue a/personas/búsqueda

Si ese es el caso, ¿cómo funcionarían las rutas basadas en colecciones? ¿No quedarían atrapados por la acción del espectáculo?

La parte pertinente de rutas rastrillo es el siguiente:

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

No estoy seguro de cuál es el problema, pero esto definitivamente debería funcionar como esperaba. (Me pregunto si el formato .json está causando problemas.) ¿Puede darnos la salida de 'rutas de rastreo '? –

+0

Agregué .json cuando vi que no funcionaba de la manera prevista. No hizo la diferencia. – midas06

Respuesta

21

Doh, olvida esto. Resulta que tenía recursos duplicados: línea de personas en la parte superior del archivo de rutas. Rails estaba golpeando eso primero. Me parece que realmente debería haber un cheque para la definición de ruta duplicada allí.

+0

Me salvó el día. En routes.rb con más de 1000 líneas :) –

+0

Gracias midas ... Se eliminaron los recursos duplicados y funciona muy bien. Estaba luchando desde ayer. Gracias una vez más :) –

+0

Awesome, thanks !!! – astgtciv

0

¿Qué versión de rieles que se ejecuta? Intente crear una aplicación de prueba con solo el código que ha proporcionado aquí y vea si funciona. Probablemente hay algo más que causa un conflicto que no has mencionado.

Utilizando su código en los carriles 3.0.0beta4 produjo los resultados deseados:

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 

aquí es presentar mis rutas:

resources :people do 
    collection do 
     get :search 
    end 
    end 

Tengo un people_controller.rb con un método de búsqueda definido.

+0

Ahora estoy usando edge rail, pero también probé con beta 4 ... – midas06

0

También tuve un problema similar. De acuerdo con el ejemplo de mi routes.rb veía así

resources :people 

... 

resources :people do 
    collection do 
     get :search 
    end 
    end 

lo cambió a:

resources :people do 
    collection do 
     get :search 
    end 
    end 

... 

resources :people 

y puedo acceder a la colección ... por cierto, esta es la forma adecuada de añadir rutas? es decir, ¿es un buen estilo agregar una nueva ruta al agregar una acción a un controlador y dejar los recursos "antiguos": gente así?

+0

Sé que esto es viejo, pero esencialmente estás simplemente duplicando la segunda vez. – bradlis7

Cuestiones relacionadas