Mustervergleich in Schienen ("where column LIKE '% foo%") mit Postgres

7

Ich habe ein Personenmodell, das Namen enthält, und ich möchte diese so einfach wie möglich suchen.

Gibt es eine Methode "rails / ActiveRecord" in den Zeilen von People.like(:name => "%#{query}%") , wie bei DataMapper? Ich konnte in den ActiveRecord-Dokumenten nichts dergleichen finden, aber ich bin schockiert, wenn es einfach nicht möglich ist.

Momentan mache ich Person.where "name LIKE '%#{query}%'" , was gut funktioniert, aber eine offensichtliche SQL-Injection-Schwachstelle ist.

Schienen 3.2

    
AlexQueue 09.07.2013, 18:07
quelle

1 Antwort

27

Verwenden Sie stattdessen eine parametrisierte Abfrage, um SQL-Injektionen wie folgt zu vermeiden:

%Vor%

Beachten Sie, dass die Prozentzeichen müssen Teil des Parameters sein müssen, nicht die where -Klausel oder Rails werden es umgehen, und Sie erhalten einen Syntaxfehler. (Zumindest bei Postgres.)

%Vor%     
Luís Ramalho 09.07.2013, 18:11
quelle