Rails 4 – 如何呈现JSON而不管请求的格式?

我想要一个Rails控制器(所有这些,实际上,它是一个API)来永远呈现JSON。

我不希望Rails返回“找不到路由”,或者尝试找不到HTML模板,或者返回406.我只是希望它自动并始终呈现JSON,例如从RABL或JBuilder视图。

这可能吗? 相关问题似乎有答案,具有上述缺点。

您可以在控制器中添加before_filter ,将请求格式设置为json

 # app/controllers/foos_controller.rb before_action :set_default_response_format protected def set_default_response_format request.format = :json end 

这会将所有响应格式设置为json 。 如果要允许其他格式,可以在设置request.format时检查是否存在format参数,例如:

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

你可以使用format.any

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

我有类似的问题,但扩展名为“.js”。 要解决我在视图中执行以下操作: <%= params.except!(:format) %> <%= will_paginate @posts %>

当然:

 before_filter :always_json protected def always_json params[:format] = "json" end 

您应该将它放在API的根控制器中。