Primeiro, eu encorajo você a mover a lógica do Model para Models. Em vez de criar a lógica de pesquisa no Controller, crie um método #search no seu modo de cotação.
class Quote
def self.search(query)
...
end
end
e seu controlador se torna
# 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
Agora, de volta ao problema original. Sua lógica de pesquisa existente comete um erro muito grave:ela interpola diretamente o valor abrindo seu código para injeção de SQL. Supondo que você use Rails 3, você pode aproveitar a nova sintaxe #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
É um tópico um pouco avançado. Se você quer entender o que o
combined_scope
+ inject
sim, recomendo que você leia o artigo O magro em escopos
.