ActiveScaffold può essere configurato per mostrare il modulo di ricerca prima di visualizzare un elenco?

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

Domanda

Quando chiedo ad ActiveScaffold di mostrarmi un elenco molto lungo (ad esempio l'elenco dei prodotti venduti), esegue la query del database per ottenere la prima pagina di dati e la visualizza. Se l'elenco presenta alcune relazioni, l'esecuzione della query potrebbe richiedere del tempo (oltre un secondo). Il più delle volte, non mi interessa questo & Quot; non filtrato & Quot; lista: la prima cosa che voglio fare è fare clic su " cerca " e filtra l'elenco.

Esiste un modo per dire ad ActiveScaffold not di visualizzare l'elenco non filtrato quando viene chiamata l'azione dell'elenco? Vorrei semplicemente visualizzare il modulo di ricerca, attendere l'inserimento di alcuni criteri e solo quindi visualizza l'elenco filtrato.

È stato utile?

Soluzione

Ho trovato una soluzione definendo il metodo condition_for_collection nel controller. È una specie di hack, ma è semplice (3 righe) e funziona:

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

Ecco come va: quando si richiede l'elenco, viene chiamato il metodo elenco del controller, gestito da ActiveScaffold. ActiveScaffold chiama condition_for_collection e poiché l'azione è list (non update_table ), il metodo condition_for_collection sopra restituisce & Quot; 1 = 2 < !> quot ;, che ovviamente porta a un elenco vuoto.

L'utente può fare clic sul " Cerca " pulsante e avvia una ricerca. Questo chiama l'azione update_table , di nuovo ActiveScaffold chiama condition_for_collection , che questa volta restituisce & Quot; & Quot; (nessun filtro), quindi viene cercato l'intero elenco.

Non è davvero bello, ma fa il lavoro.

Altri suggerimenti

Probabilmente dovrai sovrascrivere l'azione #index e fornire il tuo modello. Non sembra che ci sia modo di dirlo per non mostrare quell'elenco.

Qualcosa del genere:

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

Dovrai quindi implementare il tuo metodo di indice che ha il suo modello e così via. Passa indietro all'azione di ricerca di Active Scaffold. Non sono sicuro di come lo faresti, ma se guardi l'origine HTML per la pagina originale che torni indietro dovrebbe essere abbastanza chiaro quale azione si collega alla ricerca.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top