2016-06-13 9 views
0

Ich habe eine Entity in meiner Datenbank, die mehrere Felder haben. Ich brauche in dieser Einheit suchen basiert, wenn eine bestimmte Eingabe es in bestimmten Bereichen enthalten ist, mit gutem BeispielRuby on Rails: Mehrere Bedingungen in Rails basierend auf verschiedenen Feldern wie

Entity Auto

  • model_name
  • Besitzer

ich so suchen möchten (eine Pseudo-SQL-Idee)

Select * FROM Car WHERE (LIKE model_name = "%maz%" OR LIKE owner = "%maz%") 

Ich habe mit der find-Methode versucht, aber es funktioniert nicht

searched_string = "%maz%" 
Car.find(:all, :conditions => {model_name: searched_string, owner: searched_string}) 

Wie dies zu erreichen?

Antwort

1

Bei Verwendung der Option conditions in einer Abfrage wird die resultierende SQL für eine genaue Übereinstimmung generiert. Darüber hinaus wird jede hinzugefügte Bedingung mit einem AND, nicht einem OR verbunden.

aber sagen, dass die SQL durch Ihre Frage oben wahrscheinlich erzeugt sieht wie folgt aus:

SELECT * FROM Car WHERE (model_name = "%maz%" AND owner = "%maz%")

Um die Abfrage die Sie suchen, haben Sie an Hand schreiben die SQL für die WHERE Klausel.

Car.where("model_name ILIKE :q OR owner ILIKE :q", q: "%maz%")

HINWEIS: Ich bin über die modernere ActiveRecord Syntax.


Einige gute Nachricht ist, dass Rails 5 wird support for "or" queries umfassen.

+0

Großartig! Froh, dass es funktioniert hat. Bei der Suche nach Groß- und Kleinschreibung werden Sie feststellen, dass ich das Schlüsselwort "ILIKE" anstelle des Schlüsselworts "LIKE" verwendet habe - dies ist genau für die Suche nach Groß- und Kleinschreibung. Also benutze 'ILIKE' anstelle von' LIKE' und du wirst gut sein. –