Primero, le recomiendo que mueva la lógica de Model a Models. En lugar de crear la lógica de búsqueda en el controlador, cree un método #search en su modo de cotización.
class Quote
def self.search(query)
...
end
end
y su controlador se convierte en
# receives a string, splits it in a array of words, create the 'conditions'
# query, and send it to ActiveRecord
def search
@quotes = Quote.search(params[:query])
end
Ahora, de vuelta al problema original. Su lógica de búsqueda existente comete un error muy grave:interpola directamente el valor abriendo su código a la inyección de SQL. Suponiendo que usa Rails 3, puede aprovechar la nueva sintaxis #where.
class Quote
def self.search(query)
words = query.to_s.strip.split
words.inject(scoped) do |combined_scope, word|
combined_scope.where("quote LIKE ?", "%#{word}%")
end
end
end
Es un tema un poco avanzado. Quiero entender qué es el combined_scope
+ inject
lo hace, le recomiendo que lea el artículo The Skinny on Scopes
.