web-dev-qa-db-fra.com

Rails 4 - Comment rendre le code JSON indépendamment du format demandé?

J'aimerais qu'un contrôleur Rails (tous, en fait, c'est une API) rende JSON toujours.

Je ne veux pas que Rails renvoie "route non trouvée", ou tente de ne pas trouver un modèle HTML, ou renvoie 406. Je veux simplement qu'il rende automatiquement et toujours le format JSON, par exemple. depuis une vue RABL ou JBuilder.

Est-ce possible? Les questions connexes semblent avoir des réponses qui présentent les inconvénients susmentionnés.

17
Zach

Vous pouvez ajouter un before_filter dans votre contrôleur pour définir le format de la requête sur json:

# app/controllers/foos_controller.rb

before_action :set_default_response_format

protected

def set_default_response_format
  request.format = :json
end

Cela définira tous les formats de réponse sur json. Si vous souhaitez autoriser d'autres formats, vous pouvez vérifier la présence du paramètre format lors de la définition de request.format, par exemple:

def set_default_response_format
  request.format = :json unless params[:format]
end
30
vee

Vous pouvez utiliser format.any:

def action
  respond_to do |format|
    format.any { render json: your_json, content_type: 'application/json' }
  end
end
11
Peleg

J'ai eu le même problème mais avec l'extension '.js'. Pour résoudre j'ai fait ce qui suit dans la vue: <%= params.except!(:format) %> <%= will_paginate @posts %>

0
ruslan