Puede ActiveScaffold ser configurado para mostrar el formulario de búsqueda antes de mostrar una lista?

StackOverflow https://stackoverflow.com/questions/489798

Pregunta

Cuando le pregunto ActiveScaffold que me mostrara una lista muy larga (por ejemplo, la lista de los productos que se venden), se ejecuta la consulta de base de datos para obtener la primera página de datos y muestra de ello.Si la lista tiene un par de relaciones, esta consulta puede tomar algún tiempo para ejecutar (más de un segundo).La mayoría de las veces, no estoy interesado en este "sin filtro" de la lista:la primera cosa que quiero hacer es hacer clic en "buscar" y el filtro de esta lista.

Hay alguna manera de que yo pueda decir ActiveScaffold no para mostrar el sin filtrar lista cuando la acción de la lista se llama?Me gustaría que simplemente mostrar el formulario de búsqueda, esperar a que algunos de los criterios para ser ingresados, y sólo entonces visualización de la lista filtrada.

¿Fue útil?

Solución

Encontré una solución definiendo el método condition_for_collection en el controlador. Es una especie de truco, pero es simple (3 líneas) y funciona:

def conditions_for_collection
  params[:action]=="update_table" ? "" : "1=2"
end

Así es como funciona: cuando solicita la lista, se llama al método list del controlador, manejado por ActiveScaffold. ActiveScaffold llama a condition_for_collection , y dado que la acción es list (no update_table ), el método condition_for_collection anterior devuelve & Quot; 1 = 2 < !> quot ;, que por supuesto lleva a una lista vacía.

El usuario puede hacer clic en " Buscar " botón e iniciar una búsqueda. Esto llama a la acción update_table , nuevamente ActiveScaffold llama a condition_for_collection , que esta vez devuelve & Quot; & Quot; (sin filtro), por lo que se busca en toda la lista.

No es realmente hermoso, pero hace el trabajo.

Otros consejos

Usted probablemente necesita reemplazar el #index acción y proporcionar su propia plantilla.No parece que haya ninguna manera de decirle que no se muestran en la lista.

Algo como esto:

active_scaffold :models do |config|
    config.actions.exclude :index
end

Usted tendrá que implementar su propio método de índice que tiene su propia plantilla y así sucesivamente.Mano a Activo Andamio de la acción de búsqueda.No estoy seguro de cómo había que haría, pero si nos fijamos en el código fuente HTML de la página original que usted recibe de vuelta debe estar bastante claro qué acción es la vinculación a la que se realiza la búsqueda.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top