0

Meine Rails-Anwendung ist ein Proxy-Server für einige Rest-API-Dienste Es bedeutet, dass die gesamte Anforderung für den Rest-Server Routing über meine Rails-App ist. Ich habe alle erforderlichen Routen in meiner routes.rb-Datei definiert und verschiedene Methoden für jede Route in meinem Controller geschrieben. Anstatt also verschiedener Methoden für jede Strecke ich eine einzige Methode in meinem Controller will, wo ich die request.fullpath überprüfen und basierend auf Anfrage Parameter umleiten, um geeigneten Rest ServiceanrufSo fügen Sie eine Methode zum Behandeln mehrerer Routen hinzu

Hier sind meine Routen aussehen

get '/lookup/location/search', to: 'ticketing#lookup_location_search' 
    get '/lookup/company/search', to: 'ticketing#lookup_company_search' 
    get '/lookup/assignmentGroup/search', to: 'ticketing#lookup_assignment_group_search' 
    get '/lookup/ci/search', to: 'ticketing#lookup_ci_search' 
    get '/lookup/user/search', to: 'ticketing#lookup_user_search' 

für jede Route gibt es ein separates Verfahren in der Steuerung vorhanden ist, anstatt dass ich eine einzige Methode will die weiter korrekten Rest URL auf Anfrage Parameter

Antwort

2

basierend nennen würde ich glaube, Sie Wildcard-Routen für you'r Problem verwenden können, wie dies:

# routes.rb 
get '/lookup/*other_parts', to: 'ticketing#proxy_action' , format: false 
# maybe with constraints 
# get '/lookup/*other_parts', to: 'ticketing#proxy_action' , format: false, constraints: { other_parts: /.../ } 

# within your controller 
def proxy_action 
    case params[:other_parts] 
    when 'location/search' 
     ... 
    when 'assignmentGroup/search' 
     ... 
    ... 
    else 
     ... 
    end 
+0

Sie meinen 'Case', richtig? – Adrian

+0

@adrian ja, dein Recht. Ich meinte meinen Fall. Ich habe meinen Code korrigiert. – slowjack2k

+0

Also, wenn Sie den anderen Teil in switch-Anweisung übereinstimmen dann wie mit dynamischen Daten übereinstimmen? z. B. "location /: location_id/search" – Sunny

Verwandte Themen