我正在使用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个字符) 密码确认不能为空
答案 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
属性的。我相信它们是由浏览器过滤的,所以你如何保存它们将取决于它们在你的控制器中的处理方式