2010-08-28 10 views
7

Sto cercando di individuare la "migliore" posizione in cui inserire la logica del modulo di ricerca a più attributi in un'applicazione Rails. Il modulo di ricerca in questione ha diversi attributi che possono avere o meno valori e i tipi di dati differiscono tra gli attributi. (Ad esempio, ci sono opzioni di ricerca per cercare elementi con un attributo prezzo tra due numeri, intervalli di date, valori stringa, ecc.) Inoltre, il modello in questione ha diversi attributi annidati attraverso has_a/has_many relazioni e alcuni di questi attributi bisogno di essere ricercabileDove mettere la logica di ricerca del modello in un'applicazione Rails?

Il mantra Rails di thick model, controller sottile, mi ha esitato a cercare di aggregare la logica di ricerca nel controller. Tuttavia, non sembra appropriato inserire la logica relativa alla costruzione delle condizioni di ricerca nei modelli. Infine, nello spirito di DRY, sono riluttante a codificare un gruppo di nomi di attributi specifici in alcuni moduli poiché sarà necessario applicare una logica di ricerca simile a diversi modelli non correlati. Forse una convenzione di denominazione dei campi modulo nella vista di ricerca potrebbe essere utilizzata per costruire le giuste condizioni? (Qualcosa come usare prefissi come "min_", "max_", "startdate_" che indica il tipo di dati e l'operatore di ricerca e il suffisso come nome del modello e/o attributo?)

Ho cercato un consiglio su questo, ma la maggior parte del consiglio sembra inflessibile (nomi di attributi hardcoded, nessun supporto per gli attributi annidati) o per utilizzare ricerche basate su route che non penso funzionerà per le mie necessità (dove 5-10 parametri possono essere usati in un cerca subito).

Qualche suggerimento sul "Modo Rails" di fare questo?

+1

Ottima domanda. Interessanti domande su Rails come questa raramente attirano molta attenzione qui su SO. Ma se vengono notati, potresti ottenere delle ottime risposte. Controlla la mia domanda qui http://stackoverflow.com/questions/1068558 che è effettivamente correlata (in qualche modo). A proposito, la tua idea sull'uso dei nomi degli attributi non è male, e sembra essere una cosa da fare Railsy. –

+1

Yar, grazie per il link. Il tuo commento è sicuramente utile per me - stavo pensando in modo simile a dove avrei messo la logica di ricerca una volta capito come farlo. Dopo aver postato la mia domanda, mi sono imbattuto in una presentazione sulla ricerca in Rails: http://www.scribd.com/doc/3188387/Advanced-Searching-in-Rails. Penso che la combinazione degli approcci proposti, il suggerimento di Dave in basso, e il tuo consiglio sull'organizzazione di un codice che non si adatti perfettamente al paradigma MVC costituiranno la base della mia soluzione. Grazie! –

+0

Certo, @ Hart Hart, e buona fortuna. –

risposta

1

Se si utilizza 2.3.x, ho sempre trovato Searchlogic un punto di partenza solido e flessibile per la ricerca di modelli ActiveRecord in cui non è necessaria la ricerca di testo completo. Supporta le associazioni, i propri ambiti nominati, ecc.

Se si utilizza Rails 3, la gemma meta_search sembra offrire funzionalità simili, ma la mia esperienza con esso è estremamente limitata.

+1

Non credo che questa fosse una domanda su quale gemma posso inserire. Era una domanda pertinente su come organizzare il proprio codice in un'applicazione di rotaie. – npiv

Problemi correlati