0

我是新来的轨道。我正在创建一个基本的 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() 只是将数据添加到我的 url ......数据没有添加到我的模型中......

我的 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
4

3 回答 3

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>

于 2013-05-05T06:15:00.287 回答
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' - 我认为它应该看起来像这样,但这取决于您的 routs 设置。要找出它,请使用 rake:routes 命令。

编辑:

在这种情况下,您实际上并不需要表单元素。

编辑#2: 如果您在创建用户后需要重定向,则根本不需要 ajax。您应该使用 form_for rails 助手,它可以帮助您为用户模型构建表单。在这种情况下,您不需要任何 javascript 代码。

于 2013-05-04T16:00:09.630 回答
0

Yauhen 的回答应该可以解决问题。我意识到你可能只是想让它工作,但想指出你想避免在这样的发布请求中使用完整的 url。它不是必需的,并且在您将代码迁移到暂存和生产区域时可能会引入更大的问题。

于 2013-05-04T20:53:52.013 回答