2016-04-12 13 views
1

Ich habe ein Rails-Projekt erstellt, das Code enthält, den ich als API ausführen möchte. Ich benutze den Rails-Api-Edelstein.Ruby API - Parameter akzeptieren und Skript ausführen

Die Datei befindet sich in app/controllers/api/stats.rb.

Ich möchte in der Lage sein, dieses Skript auszuführen und JSON-Ausgabe zurückgeben, indem Sie einen Link wie diesen - http://sampleapi.com/stats/?location=USA?state=Florida.

Wie soll ich mein Projekt so konfigurieren, dass es, wenn ich diesen Link besuche, meinen Code ausführt?

+0

Ich denke, für die URL meintest du 'http://sampleapi.com/stats/?location=USA&state=Florida '. Die URL-Abfragezeichenfolge darf nur ein einzelnes "?" was die Abfragezeichenfolge vom Pfad trennt. – jwadsack

+0

Danke für den Tipp –

Antwort

1

die Datei sollte stats_controller.rbapp/controllers/api/stats_controller.rb

genannt werden, können Sie eine index Methode erstellen, in dem Sie Ihren Code

class API::StatsController < ApplicationController 
    def index 
     #your code here 
     render json: your_result 
    end  
    end 

in der Datei hinzufügen können config/routes.rb sollten Sie

get 'stats' => 'api/stats#index', as: 'stats' 

Um den Zugriff hinzufügen Die Parameter in der URL können Sie in Ihrer Index-Methode mit params[:location],tun

+0

Ich bekomme diesen Fehler und ich bin mir nicht sicher, wie ich es umgehen soll. 'Nicht Autoload Konstante API :: StatsController, erwartete /home/ubuntu/workspace/app/controllers/api/stats_controller.rb zu definieren it' –

+0

Ihr Controller-Name sollte' Api :: StatsController' –

+0

Ok vielen Dank viel! Das hat funktioniert, aber Sie müssen API in allen Obergrenzen haben. –

0

Hier ist, wie ich daran denken würde:

in app/controllers/api/stats_controller.rb

module Api 
    class StatsController 
    def index 
     # your code implementation 
     # you can also fetch/filter your query strings here params[:location] or params[:state] 
     render json: result # dependent on if you have a view 
    end 
    end 
end 

in config/routes.rb

# the path option changes the path from `/api` to `/` so in this case instead of /api/stats you get /stats 
namespace :api, path: '/', defaults: { format: :json } do 
    resources :stats, only: [:index] # or other actions that should be allowed here 
end 

Lassen Sie mich wissen, Wenn das funktioniert