Wprowadzam proste API w mojej aplikacji do komunikacji z aplikacją na Androida. Próbuję użyć AbstractController :: Metal głównie dla wydajności. Problem, który mam, polega na tym, że render ignoruje opcję statusu, którą przechodzę.Rails 4 AbstractController :: Renderowanie metalu ze statusem! = 200 (tj. 401, 404)
Bardzo prosty przykład:
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
Wywołanie
curl -v -X GET http://app.dev:3000/api/v1/sessions.json
będę oczekiwać, aby otrzymać 401 ale zamiast ja dostaję 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
jakieś pomysły? Nadpisywanie pliku response.status jest jedyną pracą, jaką udało mi się znaleźć, ale szczerze wygląda na to, że to brzydki hack.
Z góry dziękujemy za uwagi.
jesteś pewien, że '/ api/v1/sessions.json' przechodzi do akcji akcji 'show'? a także wygląda zamiast 'statusu renderowania:: nieautoryzowane' powinno być 'renderuj nic: prawda, status: 401' – IS04
@ IS04 Tak, to pokazuje, ponieważ na moich trasach mam zasób: sesje (zamiast zasobu ** s * *). Próbowałem również renderować nic i otrzymałem taki sam wynik (jeśli chodzi o status, ciało odpowiedzi było puste). –
Mam ten sam problem z ActionController :: Metal - wszelkie spostrzeżenia, które na nim odkryłeś? – Michael