2012-04-22 4 views
3

私はSinatraには新しく、基本的なCRUD機能を利用するシンプルなTodoアプリを作っています。jQueryを使ってSinatra delete routeを呼び出す

バックエンドで私は作業ルートを持ち、すべてをテストしました。私はいくつかのフロントエンド機能を組み込みたいと思っており、jQueryを使用してそれを支援することに決めました。 jQueryに現在のコードがあり、そのアイテムがクリックされるとtodoアイテムの1つにCSSクラスが追加されます。 「完了した」クラスのタスクを収集し、データベースからタスクを削除するSinatraルートをトリガーする「完了したタスクの削除」というボタンを追加しました。現在シナトラルートがある:

delete "/hub/note/:id" do 
    n = Note.get params[:id] 
    n.destroy 
    redirect '/hub' 
end 

どのように私はjQueryとシナトラが「完了」のクラスでアイテムを削除して通信するのですか。どんな助けも信じられないほど役に立つでしょう。 method_overrideトリック/ハック、あなたがこれを行うことにより、あなたが欲しいものを得ることができます活かし

答えて

2

:on RailsのシナトラやRubyなどのRackを活用

jQuery.post("/hub/note/" + id, {_method: "delete"}, callback); 

ものは、この動作を持っている必要があります。

+0

ありがとうございます!クラス "completed"を持つ要素をつかんで、上のメソッドをそれに送信できますか? – Julian25

+0

確かに、それはうまくいくでしょう。個人的にはおそらく、これを行う方法は、ノート全体を具現化している各tr(またはli?whatever)にdata-id = "1"または同様のプロパティを追加してから行います。 $( "。completed "/ hub/note /" + id、{_method: "id");var id = $(this).closest( "tr")。データ( "id"); $。 "delete"}、function(){ // whatever }); }); – Max

0

jQueryコード内。あなたのシナトラコード

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 

$.post('/user/' + user.id, {_method: 'delete'}, function(result_data) { 
    console.log('DELETE result', result_data); 
}).error(function(){ 
    console.log("Error trying to DELETE"); 
}); 

あなたシナトラアプリはmodularアプリでない場合、また、あなたの他のset sのset :method_override, true行が含まれます。

関連する問題