2017-07-11 5 views
0

Ich versuche, eine einfache Suchfunktion in meiner App zu erstellen. Dazu sucht der Benutzer auf der Seite "/ search/users/[query]". Die Parameter sind korrekt eingerichtet, aber ich kann nicht herausfinden, wie man es so macht, dass es die Datenbank nach allen Benutzern durchsucht, die den Suchbegriff in ihrem Benutzernamen haben. Ich fühle mich wie ich bin fast da, aber es funktioniert nicht:Benutzer mit Ruby-Variable als Abfrage suchen

def search_handler 
     @query = params[:query] 
     @type = params[:type] 
     if @type == "users" 
      @users = User.all.username.match(@query/i) 
     end 
    end 

Antwort

2

können Sie versuchen, die params[:query] eine LIKE SQL-Abfrage innerhalb einer where Active Anweisung übergeben:

def search_handler 
    @query = params[:query] 
    @type = params[:type] 
    if @type == 'users' 
    @users = User.where('username LIKE ?', "%#{@query}%") 
    end 
end 

, die Sie alle Benutzer, wenn der Benutzer mit dem Wert von @query entspricht, die Sie bestanden haben, eine SQL-Abfrage wie Herstellung:

SELECT "users".* FROM "users" WHERE (username LIKE '%blablabla%') LIMIT ? [["LIMIT", 11]] 

Sie können einen Blick auf die ActiveRecord Query Methods werfen, um Ihre Abfragen in Rails zu verbessern.

+0

Perfekt. Danke vielmals! – Collin

+0

Beachten Sie, dass 'LIKE' abhängig von der von Ihnen verwendeten Datenbank die Groß- und Kleinschreibung beachten kann. Daher sollten Sie den Spaltenwert und das Muster möglicherweise verkleinern, wenn Sie eine Suche ohne Beachtung der Groß- und Kleinschreibung durchführen möchten. –

Verwandte Themen