我是铁杆新手。 我正在创建一个基本的rails-api。尝试使用JS请求将用户添加到我的模型...
这是我的HTML文件:(add-user.html)
<script type="text/javascript" charset="utf-8">
$(function () {
$('#adduser').submit(function(e){
$.post('http://localhost:3000/users', {user: {username: $("#usr").value}, user: {password:$("#psw").value}});
});
});
</script>
<form id="adduser" data-ajax="false">
<input type="text" id="usr" placeholder="Username"/>
<input type="password" id="psw" placeholder="Password"/>
<input type="submit" value="Add User" id="usradd" name="login"/>
</form>
当我点击提交时,$ .post()只是将数据添加到我的网址... 数据没有添加到我的模型......
我的users_controller代码:
def new
@user = User.new
render json: @user
end
def create
@user = User.new(params[:user])
if @user.save
render json: @user, status: :created, location: @user
else
render json: @user.errors, status: :unprocessable_entity
end
end
答案 0 :(得分:1)
实际上您不需要使用$ .post,因为您可以通过在表单标记本身中指定操作URL来提交表单。请检查以下内容。
<form action="/users/create" method="post"> <input type="text" id="usr" placeholder="Username"/> <input type="password" id="psw" placeholder="Password"/> <input type="button" value="Add User" id="usradd" name="login"/> </form>
答案 1 :(得分:0)
试试这个:
<input type="text" id="usr" placeholder="Username"/>
<input type="password" id="psw" placeholder="Password"/>
<input type="button" value="Add User" id="usradd" name="login"/>
$(function () {
$('#usradd').click(function(e){
var user = {
username: $("#usr").val(),
password: $("#psw").val()
}
$.post('/users/create', user);
});
});
'/ users / create' - 我认为它应该是这样的,但它取决于你的溃败设置。要找出它,请使用rake:routes命令。
修改强>
在这种情况下,你真的不需要表单元素。
编辑#2: 如果在创建用户后需要重定向,则根本不需要ajax。您应该使用form_for rails helper,它将帮助您为您的用户模型构建表单。在这种情况下,您不需要任何JavaScript代码。
答案 2 :(得分:0)
Yauhen的答案应该可以解决问题。我意识到你可能只是试图让它工作,但是想指出你想避免在这样的帖子请求中使用完整的URL。它不是必需的,并且在将代码迁移到登台和生产区域时可能会引入更大的问题。