2012-05-21 2 views
32

Я пытаюсь сказать рельсы 3.2, что он должен оказывать JSON по умолчанию, и кик HTML полностью, как это:Render JSON вместо HTML по умолчанию?

respond_to :json  

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

С помощью этого синтаксиса, я должен добавить .json к URL. Как я могу это достичь?

ответ

65

Вы можете изменить ваши routes.rb файлов указать формат по умолчанию

routes.rb

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

Это изменит формат ответа по умолчанию для всей clients_controller

+0

спасибо, вот что я искал! – Tronic

+4

Можно ли добавить глобально для всех ресурсов? – shredding

+4

Чтобы добавить формат по умолчанию для всех ресурсов, объявите ресурсы в блоке 'defaults':' defaults format: 'json' {resources: clients; ресурсы: продукты} '. –

10

Если вы не» t нужно, чтобы RESTful отвечал в вашем действии индекса, а затем просто передайте свой xml-ответ напрямую:

def index 
    render json: Client.all 
end 
+0

Мне нужно спокойное реагирование. но спасибо в любом случае! – Tronic

+1

@Tronic Возможно, я вас не понял правильно. Я думал, что ваше действие 'index' не должно вообще отвечать на html, и вы хотите, чтобы он ответил на json даже без/.json в вашем URL-адресе. – jdoe

+0

это ценная альтернатива ответа @rogeilog для тех, кто не хочет переопределять ответ по умолчанию для ВСЕХ своих контроллеров, но только для определенного действия – mmcrae

4

Этот шаблон хорошо работает, если вы хотите использовать те же действия контроллера для обоих. Создайте веб-версию, как обычно, используя: html в качестве формата по умолчанию. Затем перетащите api под дорожку и установите: json в качестве значения по умолчанию.

Rails.application.routes.draw do 

    resources :products 

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

end 
Смежные вопросы