Ruby 如何使用ajax将json对象传递给控制器?
我有一个json对象。我想通过传递这个值来创建一个新学生。如何在ruby on rails中使用ajax将该对象的值传递给控制器? 这是我用来传递对象的代码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
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数据库