Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wyszukiwanie wielu słów w Ruby i MySQL

Po pierwsze, gorąco zachęcam do przeniesienia logiki Modelu do Models. Zamiast tworzyć logikę wyszukiwania w kontrolerze, utwórz metodę #search w trybie wyceny.

class Quote
  def self.search(query)
    ...
  end
end

a twój kontroler staje się

# 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

Wróćmy teraz do pierwotnego problemu. Twoja istniejąca logika wyszukiwania popełnia bardzo poważny błąd:bezpośrednio interpoluje wartość otwierającą kod do wstrzyknięcia SQL. Zakładając, że używasz Rails 3, możesz skorzystać z nowej składni #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

To trochę zaawansowany temat. Chcę zrozumieć, co combined_scope + inject tak, polecam przeczytać artykuł Chudy na Scopes .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Windows7 WAMP problemy z 64-bitowym stosem MySQL

  2. Skąd mogę pobrać przykładową bazę danych Mysql?

  3. Przecięcie geometrii MySQL daje nieprzecinające się wyniki

  4. upewnij się, że wynik metody pobierania PDO jest błędem lub pustym wynikiem

  5. Podejście do wielu zapytań MySQL za pomocą Node.js