Ruby on rails 为什么我的RESTful API返回404?

Ruby on rails 为什么我的RESTful API返回404?,ruby-on-rails,ruby,rest,http-status-code-404,Ruby On Rails,Ruby,Rest,Http Status Code 404,我正在Rails中构建REST API,在解释以下代码的观察行为时遇到困难: #GET /:id/user def find_user if params.has_key?(:id) @user = User.find(params[:id]) if @user.present? respond_to do |format| response = {:status => "200",

我正在Rails中构建REST API,在解释以下代码的观察行为时遇到困难:

  #GET /:id/user
  def find_user
    if params.has_key?(:id)
      @user = User.find(params[:id])

      if @user.present?
        respond_to do |format|
          response = {:status => "200",
                      :message => "Successfully found user.",
                      :first_name => @user.first_name,
                      :last_name => @user.last_name}

          format.json { render json: response, status: :ok }
        end
      else
        respond_to do |format|
          response = {:status => "422", :message => "Failed to get user."}
          format.json { render json: response, status: :unprocessable_entity}
        end
      end
    else
      respond_to do |format|
        response = {:status => "422", :message => "Failed to get user."}
        format.json { render json: response, status: :unprocessable_entity}
      end
    end
  end
此方法表示API端点,可以通过以下URL
http://localhost:3000/api/52/user

这似乎是可行的,当请求具有有效ID的用户时,API会正确响应

当请求具有无效ID的用户时,即
http://localhost:3000/api/NotAnId/user


我在我的方法中设置了这样一个条件,即如果搜索一个用户对象,但没有找到任何东西,
422不可处理的实体
将作为状态代码返回,但由于某种原因,它总是返回404。为什么每次用无效的用户ID搜索用户时,都返回404而不是422?为什么我的代码被重写

这是因为
User.find(params[:id]
)如果找不到记录,则引发RecordNotFound,如果您将其更改为
User.find by_id(params[:id])
它将按您的预期工作

事实上,如果

#GET /:id/user
def find_user
  @user = User.find_by_id(params[:id])
  if @user
    response = {:status => "200",
      :message => "Successfully found user.",
      :first_name => @user.first_name,
      :last_name => @user.last_name
    }
    render json: response, status: :ok 
  else
    response = {:status => "422", :message => "Failed to get user."}
    render json: response, status: :unprocessable_entity
  end
end