Rails控制器操作返回406不可接受而不是404未找到

时间:2016-04-13 10:16:12

标签: ruby-on-rails http-response-codes

为什么当我传入一个不存在的对象时,这不会按预期返回404?我可以看到它进入scope_mosaic,遇到一个nil,但不是在那时返回404,而是继续执行social_share_image方法,返回406,然后我得到ActionController::UnknownFormat错误。

before_action :scope_mosaic

def social_share_image
  candidate_url = @mosaic.social_share_image
  if candidate_url.nil?
    redirect_to og_image_url
  else
    redirect_to candidate_url
  end
end

private

def scope_mosaic
  @mosaic = Mosaic.find_by(id: params[:id])
  if @mosaic.nil?
    render_error(:not_found, :not_found)
  end
end

编辑:render_error

这是render_error方法,在application_controller

中定义
def render_error(status, error_code, body = nil)
  data = { error_code: error_code }.merge(body || {})

  respond_to do |format|
    format.json { render json: data.to_json, status: status }
  end
end

0 个答案:

没有答案