ajax总能获得成功

时间:2014-02-03 16:44:53

标签: jquery ruby-on-rails ajax

我有以下控制器

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

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

问题是,无论您是否找到该用户,您总是会返回200成功状态代码。如果您需要使用状态代码处理响应,可以采用以下方式更改用户搜索代码:

@user = User.where(["username = ?", params[:username]]).first!

这会引发ActiveRecord::RecordNotFound错误,因此您可以在客户端获得404

作为旁注,您拥有的where语句将始终返回与搜索条件匹配的用户数组(即使用户只有一个)。因此,您应该将.first放在最后,以获取找到的第一个用户。 bang方法只是提出了你需要的异常,它就像find一样。