2012-05-21 16 views
32

próbuję powiedzieć szyny 3.2 że powinien uczynić JSON domyślnie i kick HTML zupełnie tak:Renderować JSON zamiast HTML jako domyślny?

respond_to :json  

def index 
    @clients = Client.all 
    respond_with @clients 
end 

Z tej składni, muszę dodać .json do adresu URL. Jak mogę to osiągnąć?

Odpowiedz

65

Można modyfikować routes.rb plików, aby określić domyślny format

routes.rb

resources :clients, defaults: {format: :json} 

To będzie zmodyfikować domyślny format odpowiedzi dla całego clients_controller

+0

dziękuję, tego właśnie szukałem! – Tronic

+4

Czy można to globalnie dodać do wszystkich zasobów? – shredding

+4

Aby dodać format domyślny do wszystkich zasobów, zadeklaruj zasoby w bloku 'defaults':' format defaults: 'json' {resources: clients; zasoby: produkty} '. –

10

Jeśli don” t potrzebujesz odpowiedzi RESTful w akcji indeksu, a następnie wyrenderuj bezpośrednio odpowiedź Xml:

def index 
    render json: Client.all 
end 
+0

Potrzebuję spokojnego odpowiadania. ale i tak dziękuję! – Tronic

+1

@Tronic Może nie zrozumiałem cię poprawnie. Myślałem, że twoje "indeksowanie" akcji w ogóle nie powinno reagować na html i chcesz, żeby odpowiadał na json nawet w/o .json w twoim adresie URL. – jdoe

+0

jest to cenna alternatywa dla odpowiedzi @rogeilog dla tych, którzy nie chcą przesłonić domyślnej odpowiedzi dla WSZYSTKIEGO ich kontrolera, ale tylko dla pewnej akcji – mmcrae

4

Ten wzór działa dobrze, jeśli chcesz użyć tych samych działań kontrolera dla obu. Stwórz wersję internetową jak zwykle, używając: html jako domyślnego formatu. Następnie schowaj api pod ścieżką i ustaw: json jako domyślny.

Rails.application.routes.draw do 

    resources :products 

    scope "/api", defaults: {format: :json} do 
    resources :products 
    end 

end 
Powiązane problemy