2011-05-16 4 views
5

En mi aplicación Rails 3.0 tengo una serie de formularios de búsqueda muy grandes en mi recurso: página de índice, que requiere el uso de POST en lugar de GET.Rieles 3: ¿Utiliza un formulario POST en la página de índice?

Actualmente, la aplicación está enrutando la solicitud POST al resource # create, cuando quiero enrutar al índice de recursos #. Me doy cuenta de que esta es la ruta RESTful, pero necesito anularla. ¿Cómo puedo hacer eso, al tiempo que se preserva la capacidad de crear un nuevo registro de ese recurso?

Muchas gracias.

+0

¿No utiliza el POST para un formulario de búsqueda que contradice el paradigma REST? ¿Un GET no sería más apropiado? – Wukerplank

+1

El GET es definitivamente más apropiado, pero el límite de longitud de url es demasiado pequeño para todos los parámetros de búsqueda. – Andrew

Respuesta

2

Es mejor que tenga una acción de "búsqueda", es decir después de sólo - y luego hace que la plantilla principal, por ejemplo:

class MyController < ... 
    def search 
    @my_things = MyThing.find_with_search_params(params[:search]) 
    render :action => :index 
    end 
end 
0

Así que desea que su punto final de acción "crear" en el controlador haga 2 cosas: ¿responder a la búsqueda y crear también? Mala idea, pero la solución podría ser tan simple como usar una condición "si" en la acción crear para hacer una u otra. Si no es una respuesta satisfactoria, no dude en aclarar su pregunta un poco más.

+0

Veo que es una mala idea y me gustaría evitarla. Supongo que esperaba que hubiera una solución de enrutamiento en lugar de usar el controlador de creación para ambos. Tal vez solo moviendo la url para buscar en la página de índice algo como resource/search o resource/all. – Andrew

+1

Si estuvieras realmente tranquilo, esto funcionaría perfectamente./resources URL con un GET golpearía la acción de índice y haría una búsqueda y/resources con un POST golpearía la acción de crear y bien, hacer una creación. Su vista debe asegurar que el enlace/botón de búsqueda es el método GET y crear está usando un POST. Esta es la solución de enrutamiento./recursos con GET => índice y/recursos con POST => crear. –

3

Puede utilizar el índice, sólo tiene que añadir esto en Rails 3 rutas:

resources :my_things do 
    post :index 
end 
Cuestiones relacionadas