我有以下控制器
class UsersController < ApplicationController
def new
end
def create
# render text: params[:user].inspect
@user = User.new(user_params)
@user.save
redirect_to @user
end
def show
@user = User.find(params[:id])
respond_to do |format|
format.html
format.json { render json: @user, success: true }
end
end
def index
@users = User.all
end
def find_username
@user = User.where(["username = ?", params[:username]])
respond_to do |format|
format.html
format.json { render json: @user, success: true }
end
end
private
def user_params
params.require(:user).permit(:username, :description)
end
end
你可以看到我有自己的搜索方法(find_username)&gt;在我看来,我有以下ajax脚本:
$( document ).ready(function() {
$('#user_username').blur(function() {
var value = $( this ).val();
var url = "/username/" + value;
var data = {"username" : value};
var dataType = "json";
$.ajax({
type: "GET",
url: url,
data: data,
success: function(response){
alert("EXISTS");
},
error: function(response){
alert("NO EXISTS");
},
dataType: dataType
});
});
});
但是我总是得到“EXISTE”无论db上是否存在记录。我不明白为什么。这是我的铁路路线:
Testing::Application.routes.draw do
resources :users
get 'username/:username', to: "users#find_username"
root 'welcome#index'
end
提前感谢您的帮助!
答案 0 :(得分:0)
问题是,无论您是否找到该用户,您总是会返回200
成功状态代码。如果您需要使用状态代码处理响应,可以采用以下方式更改用户搜索代码:
@user = User.where(["username = ?", params[:username]]).first!
这会引发ActiveRecord::RecordNotFound
错误,因此您可以在客户端获得404
。
作为旁注,您拥有的where
语句将始终返回与搜索条件匹配的用户数组(即使用户只有一个)。因此,您应该将.first
放在最后,以获取找到的第一个用户。 bang方法只是提出了你需要的异常,它就像find
一样。