2016-07-11 1 views
1

Innerhalb einer Rails-Anwendung zu übergeben habe ich eine API-Controller, der AbfrageWie ein Array von param Werte über GET auf eine Controller-Aktion

module Api 
    class UserController < ApplicationController 
    def index 
     @users = User.where(query_params) 
    end 
    def query_params  
     params.permit(:id, :name) 
    end 
    end 
end 

ich mehrere IDs dieser Controller-Aktion Parameter akzeptiert geben wollen in der Lage sein über eine Anfrage erhalten.

api_users_path(id: User.my_scoped_selection.map(&:id)) 

dies eine URL mit dem ID-Array durch eckige Klammern

http://my.app/api/users?id[]=1 

I auch im addressbar manuell eingeben

http://my.app/api/users?id=1,2,3 
http://my.app/api/users?id=1&id=2&id=3 
http://my.app/api/users?id[0]=1&id[1]=2&id[2]=3 

Nichts davon korrekt Filter der Benutzer versucht haben angedeutet erzeugt, und ich bekomme alle Benutzer zurück.

Wie sollte ich eine URL formatieren, um ein Array von Param-Werten korrekt zu übergeben? Oder, wie sollte ich den Controller konstruieren, um mehrere Parameterwerte zu behandeln?

Antwort

1

Für starke Parameter eine Reihe von ID zu ermöglichen, Sie

def query_params 
    params.permit(id: [], :name) 
end 

Für URL könnten versuchen, eine Reihe von ids

http://my.app/api/users?id[]=1,2,3 
+0

doh zu senden! Ich hatte nicht einmal gedacht, dass dies eine starke params-Frage ist, und war zu sehr auf das Format der URL konzentriert. Danke @kenny, das hat perfekt funktioniert! –

+0

Sie sind willkommen =) –

Verwandte Themen