2011-08-15 4 views
0

いくつかのコードをRails 2.3.8アプリケーションに追加しています。アプリ全体がPrototypeを使用していますが、コントローラとそのビューにいくつかの機能を追加する必要があるため、古いプロトタイプコードをjQueryに切り替えて別のレイアウトを使用しています。ハイパーリンクからアクションを呼び出す際のRails 3/jQuery/AJAXのアプローチを改善するにはどうすればよいですか?

これらのビューではlink_to_remoteを使用できなくなりました。私は、「編集」アクションで、問題のレコードの属性を「クリア」する必要がある状況があります。

私は、特定のIDを持つハイパーリンクを作成し、application.jsのclick関数にバインドしました。この特定のIDの末尾に属性の名前を追加しました。

この「remove_attribute」アクションには2つのことがあります。私はレコードのIDと属性の名前が必要です。

私はフォームをシリアライズして送信しています。しかし、私はクリックしたハイパーリンクのIDを追加する必要があります!私application.jsで

は、私が持っている:

hash = { type: "POST", url: "/vehicle_applications/remove", data: $("#myform").serialize() }; 
$.ajax(hash); 
return false; 

しかし、あなたは、私はそこにハイパーリンクのIDを持っていないことがわかります。私はに私が参照するハイパーリンクのIDを取得することを知っている:

$(this).attr('id') 

しかし、私の質問は、私は変数名と$(「#のあるmyForm」)の結果へ追加その値を得るのですか、です。シリアライズ()?

また、私のアプローチはどうですか?

答えて

1

jQueryのserializeは、クエリ文字列を生成します。

.serialize()方法は、標準のURLエンコード表記のテキスト文字列を作成します。
[...]
a=1&b=2&c=3&d=4&e=5

だから、あなただけの別のコンポーネント追加する必要があります:あなたのルートによっては

var data = $('#myform').serialize(); 
if(data) 
    data += '&id=' + encodeURIComponent($(this).attr('id')); 
else 
    data = 'id=' + encodeURIComponent($(this).attr('id')); 
$.ajax({ 
    url: '/vehicle_applications/remove', 
    type: 'post', 
    data: data 
}); 

を、あなたはURLでidする場合があります

$.ajax({ 
    url: 'vehicle_applications/remove/' + encodeURIComponent($(this).attr('id')), 
    type: 'post', 
    data: $('#myform').serialize() 
}); 

このバージョンはRailsとRESTfulルーティングではより一般的ですが、 rルートはよく似ています。

+0

を見てください、私は特にその「encodeURIComponentで」ビジネス、おかげで探していました! – AKWF

+1

@AKWF:将来のための良いJavaScriptリファレンスは次のとおりです:https://developer.mozilla.org/ja/JavaScript –

0

本当に良い選択肢は、rjsです。右レールフレームワークに焼き付けられる安らかAJAX行うには、その非常に良い方法:

は良い情報をたくさんだ this railscast

関連する問題