2012-05-21 9 views
32

Ben tamamen böyle varsayılan olarak JSON ve tekme HTML işlemek gerektiğini rayları 3.2 söylemeye çalışıyorum:HTML yerine varsayılan olarak JSON oluşturuluyor mu?

respond_to :json  

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

Bu sözdizimi, ben URL'ye .json eklemek zorunda. Bunu nasıl başarabilirim?

cevap

65

Varsayılan biçimi belirtmek için routes.rb dosyalarını değiştirebilir

Bu varsayılan yanıt biçimini değiştirir

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

routes.rb senin bütün clients_controller

+0

Teşekkürler, aradığım şey bu! – Tronic

+4

Bu, tüm kaynaklar için küresel olarak eklenebilir mi? – shredding

+4

Tüm kaynaklara varsayılan biçim eklemek için, kaynakları "varsayılanlar" bloğunda belirtin: 'default format: 'json' {resources: clients; kaynaklar: ürünler}. –

10

Eğer 'etmezsen t Dizin eyleminize RESTful yanıt vermeniz yeterlidir, ardından doğrudan xml yanıtınızı doğrudan oluşturun:

def index 
    render json: Client.all 
end 
+0

için ne arıyordum ben dinlendirici yanıt gerekiyor. ama yine de teşekkürler! – Tronic

+1

@Tronic Belki seni doğru anlamıyordum. 'Endeksi' eyleminizin html'ye hiç yanıt vermemesi gerektiğini ve sizin URL'nizdeki json'a bile yanıt vermesini istediğinizi düşündüm. – jdoe

+0

Bu, denetleyicilerinin TÜMÜ için varsayılan yanıtı geçersiz kılmak istemeyenler için @rogeilog'un cevabı için değerli bir alternatiftir, ancak yalnızca belirli bir eylem için – mmcrae

4

Her ikisi için aynı denetleyici eylemlerini kullanmak istiyorsanız, bu desen iyi çalışır. Bir web sürümünü her zamanki gibi yapın, kullanarak: html varsayılan biçim olarak. Ardından api'yi bir yolun altına sıkıştırın ve aşağıdaki gibi ayarlayın: json varsayılan olarak.

Rails.application.routes.draw do 

    resources :products 

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

end