使用AJAX注册用户名

时间:2014-08-26 18:55:36

标签: jquery ruby-on-rails ruby ajax

我正在使用ajax" POST"在ruby服务器端注册用户名和密码。下面的代码是我的ajax代码。

$('#register-btn').on('click', function(e) {
    var signup = {
        username: $('input[name="username"]').val(),
        password: $('input[name="password"]').val(),
        password_confirmation: $('input[name="confirm_password"]').val(),
        email: $('input[name="email"]').val(),
        realname: $('input[name="realname"]').val(),
    };
    $.ajax({
        type: "POST",
        url:  "http://wwww.example.com/users",
        data: signup,
        success: function() {
            alert('success');
        },
        error: function() {
            alert('signup fail!');
        }
    });
    e.preventDefault();
});

但是在我的ruby服务器中,我收到了一个错误。我无法弄清楚它有什么问题?

这是我的ruby服务器告诉我的。

Started POST "/users" for 127.0.0.1 at 2014-08-26 11:45:56 -0700
Processing by UsersController#create as */*
Parameters: {"username"=>"jamme92", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "email"=>"jamme@gmail.com", "realname"=>"hien luong 92"}←[1m←[36m (0.0ms)←[0m  ←[1mSELECT 1 FROM "users" WHERE LOWER("users"."username") = LOWER('jamme92') LIMIT 1←[0m Rendered shared/error.html.erb within layouts/application (0.0ms)
Completed 500 Internal Server Error in 12ms (Views: 6.0ms | ActiveRecord: 1.0ms)

有什么错误的建议吗?

在users_controller中创建函数

def create
response_initialize

user_potential = User.new
user_potential.from_params(params)
#user_potential.password_from_params(params)

if user_potential.save
  session_user = user_potential
  session_user.permissions_seed_default
else
  error_messages = "<p>Registration failed because:</p><ul>"
  user_potential.errors.full_messages.each do |error|
    error_messages = "#{error_messages}<li>#{error}</li>"
  end
  error_messages = "#{error_messages}</ul>"
  error_render(error_messages)
end

以下是我从浏览器中获得的错误

注册失败,原因是:

密码不能为空 密码太短(最少6个字符) 密码确认不能为空

1 个答案:

答案 0 :(得分:1)

我不知道您对ajax了解多少,但有两种方法可以实现您的目标

首先,我要说的是,您遇到的一个问题是,您要单独为您的ajax呼叫分配data。你可以更好地设置一个表格&amp;然后使用Rails UJS driver或标准JQuery(就像你想要做的那样)提交表单

虽然这不是主要问题(您的params正在发送),但遵循以下任一方法将确保功能是可扩展的:

-

<强> UJS

#app/views/users/new.html.erb
<%= form_for @user, remote: true do |f| %>
   ...
<% end %>

#app/assets/javascripts/application.js
$(document).on("ajax:success", "#form", function(){
   alert("success");
});

-

<强>的Ajax

要直接修复代码,您需要使用jquery serialize();函数:

#app/assets/javascripts/application.js
$(document).on("submit", "#form", function(){
   $.ajax({
      url: "/users", 
      data: $(this).serialize();
      success: function(data) {
        alert("success");
      }
   });
});

<强>控制器

虽然这不会直接解决您的问题 - 但它肯定有助于改善您的目标。我个人希望尽可能让你的流程变得传统:

#app/controllers/users_controller.rb
class UsersController < ApplicationController 
    respond_to :js, :json, :html

    def create   
       @user = User.new user_params

       if user.save
         session_user = @user
         session_user.permissions_seed_default
       end

       #errors will be populated in your model
       respond_with @user
    end

    private

    def user_params
       params(:user).permit(:username, :password, :password_confirmation, :email, :realname)
    end
end

这里需要注意的是,我不确定您是如何处理password属性的。我相信它们是由浏览器过滤的,所以你如何保存它们将取决于它们在你的控制器中的处理方式