まず、モデルのロジックをモデルに移動することを強くお勧めします。コントローラに検索ロジックを作成する代わりに、見積もりモードに#searchメソッドを作成します。
class Quote
def self.search(query)
...
end
end
コントローラーは
になります# 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
ここで、元の問題に戻ります。既存の検索ロジックは非常に悪い間違いをします。それは、SQLインジェクションに対してコードを開く値を直接補間します。 Rails 3を使用していると仮定すると、新しい#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
少し高度なトピックです。 combined_scope
が何であるかを理解したい +inject
そうです、記事スキニーオンスコープ
。