2010-10-16 15 views
11

Sto seguenti semplice tutorial Modulo di ricerca di Ryan qui: http://railscasts.com/episodes/37-simple-search-formRails 3 - Usare LIKE per cercare un combinato 2 colonne

Ho la seguente riga nel mio Utenti Modello:

find(:all, :conditions => ['fname LIKE ?', "%#{search}%"]) 

Ma cosa mi piacerebbe fare è la ricerca attraverso una mietitrebbia 2 colonne ,: fname lname &

Dato che gli utenti cercate i miei nomi completi:

Esempio, James Brown fname = James lname = Brown

C'è un modo per fare questo in Rails in modo sicuro che funzionerà attraverso DB come SQLite, MySQL o Postgres (Heroku usa)?

Grazie!

risposta

14

potrebbe non essere abbastanza, ma io uso questo nel mio modello di persona:

scope :by_full_name lambda {|q| 
    where("first_name LIKE ? or last_name LIKE ? or concat(last_name, ', ', first_name) LIKE ?", "%#{q}%", "%#{q}%" , "%#{q}%") 
} 

vedere uno dei miei other posts per un po 'in più che vi permetterà la query di ricerca sia facoltativa.

+2

Questo funziona in mysql, non so su altri db. – DGM

+0

Inoltre, il mio utilizzo richiede cognome, nome, modifica del concat secondo necessità. – DGM

+0

Il risultato concat nella scansione di una tabella completa? –

0

Questo ha finito per funzionare molto bene ... Non sono sicuro delle prestazioni. Gli indici possono aiutare questo?

: condizioni => ['fname || lname LIKE? ', "% # {search}%"]

+0

ok forse questo non è l'ideale. Se aggiungi un'altra condizione come: [project =? AND'fname || lname LIKE? ', "% # {search}%", "% # {search2}%"] La query nel log diventa REAL messy. non so perché, però? – WozPoz