4

2 つのリンクがあります。

<%= link_to("Edit", edit_product_path(product.id)) %>
<%= link_to("Delete", product, :method => :delete) %>

生成されるリンクは次のとおりです。

<a href="/products/81/edit">Edit</a>
<a href="/products/81" data-method="delete" rel="nofollow">Delete</a>

と の両方をクリックするEditDeleteGETメソッドが使用されます。

Railsはどの方法を使用するかをどのように決定しましたか?

リンクのdata-method="delete"と とはどういうrel="nofollow"意味ですか?Delete

4

3 に答える 3

7

ブラウザは通常、GET および POST HTTP メソッドをサポートしています。PUT および DELETE 動詞をエミュレートするために、Rails_methodはフォームの送信時に特別なパラメーターを挿入します。

:methodオプションを渡すことで、使用するメソッドを指定します。

<%= link_to("Action with DELETE", path_to_something, :method => :delete) %>
<%= link_to("Action with PUT", path_to_something, :method => :put) %>

指定しない限り、デフォルト値は ですGET

Rails 3 以降、Rails は目立たない JavaScript を使用して DELETE メソッドを処理します。HTML 5 の機能data-methodである属性でHTTP 動詞を渡します。

あなたの場合、おそらく JavaScript ライブラリ (Prototype や jQuery など) と Rails アダプターを含めるのを忘れているため、機能しません。

jQuery または Prototype を使用していること、およびrails.jsJavaScript ファイルが含まれていることを確認してください。また、 を追加することを忘れないでくださいcsrf_meta_tag

<%= csrf_meta_tag %>

動きを学びたい場合は、Rails 3の Unobtrusive JavaScript に関する記事を数か月前に書きました。

于 2010-12-15T11:06:24.223 に答える
0

面白い。「:method =>:delete」オプションを指定したlink_toがデフォルトのスキャフォールドで機能することを確認できます。ただし、スキャフォールディングなしでプロジェクトをビルドしようとすると、link_toを機能させることができません。button_toは、link_toで失敗したのと同じパラメーターを使用して、問題なく機能します。

私のHEADタグには、必要なjavascriptが含まれています。

javascript_include_tag :defaults
csrf_meta_tag

とても紛らわしい。link_toを機能させるために「秘密のソース」の足場がどのように機能するのか理解できませんでした。link_todeleteがRails3では機能しないというRobの主張は、技術的には正確ではないかもしれませんが、実際には正確であることがわかりました。ロブに感謝します、私はあなたの投稿を見るまで何時間も立ち往生していました。

于 2011-02-13T00:57:10.497 に答える
-1

Rails 3 では削除にリンクを使用できません。たとえば、button_to を使用する必要があります。

<%= button_to("Delete", product, :method => :delete) %>
于 2010-12-15T10:46:05.313 に答える