我是Sinatra的新手,我正在制作一个利用基本CRUD功能的简单todo应用程序。
在后端,我有工作路线,并测试了一切。我想结合一些前端功能,并决定使用jQuery来帮助解决这个问题。我在jQuery中有一段代码,当单击该项时,会向其中一个待办事项项添加一个css类。我想要包含一个“删除已完成的任务”按钮,该按钮将使用“已完成”类收集任务,而不是触发将从数据库中删除任务的Sinatra路径。目前的Sinatra路线是:
delete "/hub/note/:id" do
n = Note.get params[:id]
n.destroy
redirect '/hub'
end
如何让jQuery和Sinatra将项目删除与“已完成”类进行通信。任何帮助都会非常有用。
答案 0 :(得分:2)
利用method_override技巧/黑客,你可以通过这样做得到你想要的东西:
jQuery.post("/hub/note/" + id, {_method: "delete"}, callback);
任何利用Rack的东西,包括Sinatra和Ruby on Rails,都应该有这种行为。
答案 1 :(得分:0)
在你的jQuery代码中。
$.post('/user/' + user.id, {_method: 'delete'}, function(result_data) {
console.log('DELETE result', result_data);
}).error(function(){
console.log("Error trying to DELETE");
});
在你的Sinatra代码中
delete "/user/:id" do
if request.xhr?
content_type :json
id = params[:id].to_i
user = User.find_by_id(id)
if !user
status 404
return {:success => false, :message => "Invalid ID supplied."}.to_json
end
user.destroy
return {:success => true, :id => id, :message => "The User with ID #{id} was deleted."}.to_json
end
status 403
return "<html><head><title>Error 403</title></head><body><h2>Expected an AJAX call.</h2></body></html>"
end
如果您的sinatra应用不是modular
应用,那么还会在您的其他set :method_override, true
中添加set
行。