2010-12-15 16 views
9

index.html.erbでは、私はすべての製品を表示し、各製品の隣には、私がEditDeleteアクションがあります。Rails "link_to"が削除アクションで機能しないのはなぜですか?

<% @products.each do |product| %> 
    ... 
    <%= link_to("Edit", edit_product_path(product.id), :class => 'action') %> 
    <%= link_to("Delete", product, :method => :delete, :class => 'action') %> 
    ... 
<% end %> 

Editリンクがうまく動作します。ただし、Deleteリンクは機能しません。次のエラーが表示されます。

Unknown action 
The action 'show' could not be found for ProductsController 

リクエストメソッドがDELETEではなくGETであると思います。しかし、明示的に:method => :deleteと設定すると、なぜこのようなことが起こるのかわかりません。

routes.rbは非常に単純です:

root :to => "products#index" 
resources :products 

私はJavascriptが有効になっています。

お勧めします。

+0

あなたのルートはあなたがカバーしているように、あなたがそれを使用していないにもかかわらず、showアクションを追加してみました...ただの思考 – Richard

+0

はあなたですか?あなたのコントローラで削除アクションがありますか?また、rake:routeコマンドを実行して、削除パスが正しく定義されているかどうかを確認してください。 – ranendra

答えて

11

rails.jsjavascript_include_tagに指定されていますか?これは、控えめなDELETEメソッドが機能するために必要です。実際に私が「破棄するために」私の古い「削除」アクションを変更していた - - あなたはjQueryのを使用している場合は、solution for that too.私は同じ問題を抱えていた

+0

ページソースでは、' rails.js'が読み込まれていることがわかります。私はjQuery 1.4.4を使用します。これは問題ですか?私は公式サイトからダウンロードし、 'javascript_include_tag'に入れました。私はそれをあなたのリンクからファイルに置き換える必要がありますか?何をダウンロードすればよいですか? –

+2

@Misha:rails.jsファイルをsrcディレクトリにダウンロードし、public/javascriptsフォルダにrails.jsという名前で保存します。 jQueryを使用している場合は、プロトタイプ 'rails.js'をjQueryの同等物に置き換える必要があります。 –

+0

@ライアン:私を導いてくれてありがとう! PrototypeではなくjQueryを使用する場合、 'javascript_include_tag:defaults'が必要ですか? –

2

削除リンクにproductの代わりにproduct_path(product)が必要です。

+0

それは助けにはならなかった。同じエラー。 –

+0

リンクタグのHTMLの外観はどうなっていますか? –

+0

'Delete ' –

0

ありますが、あなたの使用してSSLが...場合は忘れた(例えばssl_required:破壊)

5

はいけない、あなたのapplication.jsファイルにjquery_ujsを含めることを忘れ:

// 
//= require jquery 
//= require jquery_ujs 
// ... 
関連する問題