2012-02-22 11 views
11

Do tej pory znalazłem dwa sposoby, aby request.format.json? było prawdziwe w Railsach (tj. Gdy przychodzące żądanie jest traktowane jako JSON). Jednym z nich jest, jeśli żądasz zasobu, a kończąc na .json drugi jest, jeśli podasz w swoim żądaniu nagłówek Accept: application/json. Każda praca samodzielna.Szyny: jak traktować alternatywę Zaakceptuj: typy treści jako JSON?

Chcę zarejestrować własną rękę „akceptuje” typ na tym drugim przypadku:

Accept: application/vnd.myapp_v1+json a nie to traktowane przez szyny jako „żądanie json” jak application/json, bez konieczności dołączania .json.

Moja pierwsza myśl polegała na zarejestrowaniu mojego MimeType jako :json (w ramach mojego kodu inicjalizacyjnego), ale to faktycznie przerwie obsługę aplikacji/json, a nie to, co chcę zrobić.

Mime::Type.register "application/vnd.myapp_v1+json", :json # my failed attempt 

Odpowiedz

8

Ruszamy żądań iPhone nad HTML w naszej aplikacji z before_filter tak:

before_filter :determine_format 

def determine_format 
    request.format = :iphone if (request.env["HTTP_USER_AGENT"] =~ /iPhone/ && request.format == :html) 
end 

Wyobrażam sobie można zrobić coś podobnego ze swoim specyficznym formacie, może tak:

def determine_format 
    request.format = :json if (request.format == 'application/vnd.myapp_v1+json') 
end 
+0

działa idealnie! Dzięki za odpowiedź. –

8

alternatywą jest:

api_mime_types = %W(
    application/vnd.api+json 
    text/x-json 
    application/json 
) 

Mime::Type.unregister :json 
Mime::Type.register 'application/json', :json, api_mime_types 

W initializers/mime_types.rb.

Powiązane problemy