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

Zac*_*ach 20 json ruby-on-rails rabl ruby-on-rails-4

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

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

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

vee*_*vee 34

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

# app/controllers/foos_controller.rb

before_action :set_default_response_format

protected

def set_default_response_format
  request.format = :json
end
Run Code Online (Sandbox Code Playgroud)

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

def set_default_response_format
  request.format = :json unless params[:format]
end
Run Code Online (Sandbox Code Playgroud)


Pel*_*leg 12

你可以使用format.any:

def action
  respond_to do |format|
    format.any { render json: your_json, content_type: 'application/json' }
  end
end
Run Code Online (Sandbox Code Playgroud)


hlc*_*lcs 6

只是:

render formats: :json
Run Code Online (Sandbox Code Playgroud)