Ruby 如何使用ajax将json对象传递给控制器?

Ruby 如何使用ajax将json对象传递给控制器?,ruby,ajax,ruby-on-rails-3,json,ruby-on-rails-3.2,Ruby,Ajax,Ruby On Rails 3,Json,Ruby On Rails 3.2,我有一个json对象。我想通过传递这个值来创建一个新学生。如何在ruby on rails中使用ajax将该对象的值传递给控制器? 这是我用来传递对象的代码 self.save = function() { var dataToSave = { Name: self.firstName(), _age: self.Age() } alert(JSON.st

我有一个json对象。我想通过传递这个值来创建一个新学生。如何在ruby on rails中使用ajax将该对象的值传递给控制器? 这是我用来传递对象的代码

self.save = function() {
       var dataToSave = {
                    Name: self.firstName(),
                    _age: self.Age()
                 }
       alert(JSON.stringify(dataToSave))
         $.ajax({
        url: '/students/new',
        dataType: 'json',
        type: 'PUT',
        data: {total_changes: JSON.stringify(dataToSave)},
        success: function(data) {
            alert("Successful");
          },
          failure: function() {
            alert("Unsuccessful");
          }
        });
       // TODO send request
  };

}
我 终端有一些错误。它表明

Parameters: {"id"=>"new", "total_changes"=>"{\"Name\":\"hu\",\"_age\":\"7\"}"}
id被视为新的。Rake路由

[nithinv@ast297 jquery_country]$ rake routes
     students GET    /students(.:format)          students#index
              POST   /students(.:format)          students#create
  new_student GET    /students/new(.:format)      students#new
 edit_student GET    /students/:id/edit(.:format) students#edit
      student GET    /students/:id(.:format)      students#show
              PUT    /students/:id(.:format)      students#update
              DELETE /students/:id(.:format)      students#destroy
控制器是

def new
    @student = Student.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render :json => @student }
    end
  end

如何在控制器中创建函数?

它完全按照您的要求执行-将JSON对象转换为有效的字符串表示形式

现在需要解析此JSON字符串:


它完全按照您的要求执行—将JSON对象转换为有效的字符串表示形式

现在需要解析此JSON字符串:


我认为你的routes.rb有错误的路由,这就是为什么你得到的id是新的

应该是:

routes.rb

这将在学生控制器中调用新操作。因此,这取决于新操作在学生控制器中包含的代码


代码的其余部分似乎是正确的。但是,如果您仍然收到错误,请进一步显示您收到的错误消息以及新的操作代码。

我认为您的routes.rb存在错误路由,这就是您将id作为新id获取的原因

应该是:

routes.rb

这将在学生控制器中调用新操作。因此,这取决于新操作在学生控制器中包含的代码

代码的其余部分似乎是正确的。但是如果您仍然收到错误,请进一步显示您收到的错误消息以及新的操作代码。

尝试以下url:

 alert(JSON.stringify(dataToSave))
     $.ajax({
    url: '/students',
    dataType: 'json',
    type: 'PUT',
    data: {total_changes: JSON.stringify(dataToSave)},
    success: function(data) {
        alert("Successful");
      },
      failure: function() {
        alert("Unsuccessful");
      }
    });
将url更改为/students

尝试此url:

 alert(JSON.stringify(dataToSave))
     $.ajax({
    url: '/students',
    dataType: 'json',
    type: 'PUT',
    data: {total_changes: JSON.stringify(dataToSave)},
    success: function(data) {
        alert("Successful");
      },
      failure: function() {
        alert("Unsuccessful");
      }
    });

将url更改为/students

是的,它是正确的,将调用students控制器的新操作。我根据您的建议编辑了代码,但终端仍然显示参数:{id=>new,total\u changes=>{\Name\:\yut\,\\u age\:\6\}id='new'…还有一个类似这样的错误:ActiveRecord::RecordNotFound找不到id=new的学生:通过运行rake routes | grep students为学生显示路由[nithinv@ast297jquery_国家]$rake routes student GET/students.:格式化studentsindex POST/students.:格式化students创建新的\u student GET/students/new.:格式化students新建编辑\u student GET/students/:id/编辑:格式化studentsedit student GET/students/:id:格式化students显示/students/:id.:format studentsupdate DELETE/students/:id.:format students stroyy它是正确的,并将调用students控制器的新操作。我根据您的建议编辑了我的代码,但终端仍然显示参数:{id=>new,total\u changes=>{\Name\:\yut\,\\u age\:\6\}id='new'…还有一个类似这样的错误:ActiveRecord::RecordNotFound找不到id=new的学生:通过运行rake routes | grep students为学生显示路由[nithinv@ast297jquery_国家]$rake routes student GET/students.:格式化studentsindex POST/students.:格式化students创建新的\u student GET/students/new.:格式化students新建编辑\u student GET/students/:id/编辑:格式化studentsedit student GET/students/:id:格式化students显示/students/:id.:format studentsupdate DELETE/students/:id.:format students数据库