Ich implementiere eine einfache API in meiner Anwendung, um mit einer Android-Anwendung zu kommunizieren. Ich versuche, AbstractController :: Metal hauptsächlich für die Performance zu verwenden. Das Problem, das ich habe, ist, dass Render die Statusoption ignoriert, die ich übergebe.Rails 4 AbstractController :: Metall-Rendering mit Status! = 200 (d. H. 401, 404)
Sehr einfaches Beispiel:
class Api::V1::ApiController < ActionController::Metal
include AbstractController::Rendering
include ActionController::Renderers::All
include ActionController::RackDelegation
include ActionController::MimeResponds
end
class Api::V1::SessionsController < Api::V1::ApiController
def show
render status: :unauthorized # using 401 yields the same result
end
end
Aufruf
curl -v -X GET http://app.dev:3000/api/v1/sessions.json
ich erwarten würde ein 401 zu erhalten, sondern bekomme ich eine 200 OK:
> GET /api/v1/sessions.json HTTP/1.1
> User-Agent: curl/7.30.0
> Host: app.dev:3000
> Accept: */*
>
< HTTP/1.1 200 OK
Irgendwelche Ideen? Das Überschreiben von response.status ist die einzige Arbeit, die ich bisher gefunden habe, aber ehrlich gesagt sieht es wie ein hässlicher Hack aus.
Vielen Dank im Voraus für Ihre Erkenntnisse.
sind Sie sicher, dass '/ api/v1/sessions.json' geht zu deiner Aktion 'show' action? und sieht auch so aus statt 'render status:: unauthorized' sollte' render nothing sein: true, status: 401' – IS04
@ IS04 Ja es wird angezeigt, weil ich in meinen routen resource: sessions habe (statt ressource ** s * *). Ich habe auch versucht, nichts zu rendern und habe das gleiche Ergebnis (bezüglich des Status, der Körper der Antwort war leer). –
Ich habe das gleiche Problem mit ActionController :: Metal - irgendwelche Erkenntnisse, die Sie darauf entdeckt haben? – Michael