Ich möchte, dass ein Rails-Controller (eigentlich alle eine API) JSON immer und immer rendert.
Ich möchte nicht, dass Rails "route not found" zurückgibt, oder dass versucht wird, keine HTML-Vorlage zu finden, oder dass 406 zurückgegeben wird. Ich möchte nur, dass JSON automatisch und immer gerendert wird, z. aus einer RABL- oder JBuilder-Ansicht.
Ist das möglich? Verwandte Fragen scheinen Antworten zu haben, die die oben genannten Nachteile haben.
Sie können in Ihrem Controller einen before_filter
hinzufügen, um das Anforderungsformat auf json
festzulegen:
# app/controllers/foos_controller.rb
before_action :set_default_response_format
protected
def set_default_response_format
request.format = :json
end
Dadurch wird das gesamte Antwortformat auf json
gesetzt. Wenn Sie andere Formate zulassen möchten, können Sie beim Festlegen von request.format
das Vorhandensein des Parameters format
überprüfen, z. B .:
def set_default_response_format
request.format = :json unless params[:format]
end
Sie können format.any
verwenden:
def action
respond_to do |format|
format.any { render json: your_json, content_type: 'application/json' }
end
end
Ich hatte ein ähnliches Problem, aber mit der Erweiterung ".js". Um das Problem zu lösen, habe ich in der Ansicht Folgendes getan: <%= params.except!(:format) %> <%= will_paginate @posts %>
Es ist nur:
render formats: :json