Rails 3の「Data-Method = 'Delete'」はどのように優雅に劣化しますか?
質問
Rails 3はJavaScriptを目立たないようにするためにいくつかのクールなことをしているので、彼らは次のようなことをしました:
= link_to "Logout", user_session_path, :method => :delete
..
<a href="/logout" data-method="delete" rel="nofollow">Logout</a>
しかし、それはちょうど私に起こりました。JavaScriptをオフにすると、メソッドが削除されなくなりましたが、予想通りになります。だから、これらを許可する計画はありますか、それとも何らかの方法がありますか data-
優雅に劣化するための属性で、そのリンクはまだ削除要求ですか?
解決
彼らがレール3で行った変更 data-
属性は優雅な劣化に関するものではなく、目立たないJavaScriptについてでした。
Rails 2、指定 :method => :delete
リンクで、隠された入力を備えたフォームを作成してフォームを送信するインラインJavaScriptの束全体を生成します。それは現在と同じでした。JavaScriptをオフにすると、デフォルトのGETリクエストが発生します。そのため、javaScript Noのケースをサポートすることは、以前と同じです。
1つのオプションは、リンクの代わりにフォーム/ボタンを使用して、Rails 2 JavaScriptが行うように、メソッドを隠されたフィールドとして含めることです。もう1つのオプションは、Getバージョンに中間ページに移動することです。これにより、フォーム/ボタンがあります。
新しいアプローチの利点は、それが目立たないことです。 HTTP動詞を変更するためのJavaScriptは外部ファイルに存在し、 data-
添付する必要がある要素を決定するための属性。
他のヒント
を使用するのではなく link_to
方法 - javaScriptを使用して、HTTPメソッドがあることを確認する必要があります DELETE
- 使用 button_to
メソッドは、RailsにHTTPメソッドを次のように扱うように指示する非表示の入力要素を持つフォームを作成します。 DELETE
それよりも POST
. 。必要に応じて、CSSを使用してフォームのボタンをスタイリングして、リンクのように見えるようにできます。
あなたが持っている唯一のチャンスは、フォームを定義することです。リンクは、JavaScriptまたはフォームで_Method = "Delete"の投稿ではありません。
JavaScriptなしでは不可能です。
変換するための小さなjQueryプラグインを作成します data-method
リンク属性は、擬似隠されたフォームに属性(例えば、Laravelプロジェクトで使用されています)。