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.
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
Vous pouvez utiliser format.any
:
def action
respond_to do |format|
format.any { render json: your_json, content_type: 'application/json' }
end
end
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 %>