使用ajax通过电子邮件查找用户总是找不到404

时间:2014-03-04 12:00:46

标签: ruby-on-rails ajax ruby-on-rails-3

我的控制器上有以下操作:

def find_by_email(useremail)
  @kid = Kid.find_by_email(params[:kid_email]).first
  if !@kid.nil?
        respond_to do |format|
            format.json {  render json: @kid, success: true, error: false  }
        end
    end
end

使用以下路线:

get '/admin/kid/:kid_email'                 =>  "admin/kid#find_by_email"

我认为这是ajax:

$("#kid_email").blur(function() {
  var value = $( this ).val();
  var url = "/admin/kid/";      
  var data = {"email" : value}; 
  var dataType = "json";

  if (value != ""){
    $.ajax({
      type: "GET",
      url: url,
      data: data,
      success: function(response){
        alert("EXISTE");
      },
      error: function(response){
        alert("NOOOOO");
      },
      dataType: dataType
    });
  }
});

但是我总是找不到404,但是我的数据库上有测试用户。这是控制台输出:

Started GET "/admin/kid/?email=testuser%40gmail.com" for 127.0.0.1 at 2014-03-04 12:51:50 +0100
Processing by ErrorsController#routing as JSON
  Parameters: {"email"=>"testuser@gmail.com", "a"=>"admin/kid"}
MONGODB (0.7ms) development['kids'].find({:_id=>BSON::ObjectId('514055c285216d2a950003af')}).limit(-1).sort([[:_id, :asc]])
MONGODB (25.5ms) development['$cmd'].find({"count"=>"kid_weekly_connections", "query"=>{"kid_id"=>BSON::ObjectId('514055c285216d2a950003af')}, "fields"=>nil}).limit(-1)
MONGODB (28.4ms) development['kid_weekly_connections'].find({"kid_id"=>BSON::ObjectId('514055c285216d2a950003af')}).limit(-1).sort([[:start_at, :desc]])
DEPRECATION WARNING: Passing the format in the template name is deprecated. Please pass render with :formats => [:html] instead. (called from realtime at /Users/jean/.rvm/rubies/ruby-1.9.3-p484/lib/ruby/1.9.1/benchmark.rb:295)
  Rendered public/404.html (0.1ms)
Completed 404 Not Found in 68ms (Views: 8.5ms)

任何想法???

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您的路线模式正在寻找网址中的电子邮件地址。像这样:

/admin/kid/kid@example.com

所以你的JavaScript需要像这样开始:

$("#kid_email").blur(function() {
  var url = "/admin/kid/" + $(this).val();
  ...
});

然后你真的不需要设置/传递data对象。