Ruby on rails 为什么我的RESTful API返回404?
我正在Rails中构建REST API,在解释以下代码的观察行为时遇到困难: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",
#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端点,可以通过以下URLhttp://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