web-dev-qa-db-ja.com

Rails 3's "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をオフにすると、メソッドはもうDELETEではなく、期待どおりにGETになります。それで、これらを許可する計画はありますか、または許可する方法はありますかdata-属性が正常に低下するため、リンクは引き続きDELETE要求ですか?

36
Lance Pollard

これらのdata-属性を使用してRails 3で行った変更は、適切な劣化ではなく、控えめなJavaScriptに関するものでした。

Rails 2、リンクで:method => :deleteを指定すると、入力が非表示のフォームを作成してフォームを送信するインラインJavaScriptが大量に生成されます。これは、現在は、JavaScriptをオフにすると、デフォルトでGETリクエストになります。そのため、JavaScriptがない場合のサポートは、以前と同じです。

1つのオプションは、リンクの代わりにフォーム/ボタンを使用することです。これにより、Rails 2 JavaScriptのように、メソッドを非表示フィールドとして含めることができます。別のオプションは、GETバージョンを使用することです。フォーム/ボタンがある中間ページに移動します。

新しいアプローチの利点は、目立たないことです。 HTTP動詞を変更するためのJavaScriptは外部ファイルに存在し、data-属性を使用してアタッチする要素を決定します。

37
Jimmy Cuadra

HTTPメソッドがDELETEであることを確認するためにJavaScriptを使用する必要があるlink_toメソッドを使用するのではなく、button_toメソッドを使用します。これにより、非表示のフォームが作成されます。 Rails HTTPメソッドをDELETEではなくPOSTとして扱うように指示する入力要素。必要に応じて、CSSを使用してフォームのボタンのスタイルを設定できます。リンクのように見えます。

21
Tekhne

あなたが持っている唯一のチャンスはフォームを定義することです。リンクは、Javascriptなしで、またはフォームによって、POST with _method = "delete"にすることはできません。

4
shingara

Javascriptなしでは不可能です。

data-methodリンク属性を疑似非表示フォームに変換するための小さなjQueryプラグインを作成します(たとえば、laravelプロジェクトで使用)。

使用したい場合: https://github.com/Ifnot/RestfulizerJs

1
Ifnot