1

この質問が何度も聞かれたことは知っていますが、これまでのところ、どのレシピも役に立ちませんでした.

次のroutes.rbを使用して、Ruby 2.0.0、Rails 4.0.0で作成されたアプリケーションがあります。

resources :announcements do
end

次のルートを生成します。

        announcements GET    /announcements(.:format)          announcements#index
                      POST   /announcements(.:format)          announcements#create
     new_announcement GET    /announcements/new(.:format)      announcements#new
    edit_announcement GET    /announcements/:id/edit(.:format) announcements#edit
         announcement GET    /announcements/:id(.:format)      announcements#show
                      PATCH  /announcements/:id(.:format)      announcements#update
                      PUT    /announcements/:id(.:format)      announcements#update
                      DELETE /announcements/:id(.:format)      announcements#destroy

次に、HTML で非常に単純な構成を使用します。

<%= button_to 'X', announcement, method: :delete %>

次のコードが生成されます。

<form method="post" class="button_to" action="/announcements/525c0d28b9fd0171e2000003">
    <div>
         <input type="hidden" value="delete" name="_method">
         <input type="submit" value="X">
         <input type="hidden" value="DR+QjuAG9npqqWRV16Zq0G4Cq3lGpNHY0qjV8LJpUZo=" name="authenticity_token">
    </div>
</form>

すべてが非常にシンプルで、きれいで、正しいように見えます。それにもかかわらず、「ルートが一致しません」というエラーが表示されます。なんで?

4

3 に答える 3

0

試す

<%= button_to "Delete", {:controller => :announcements, :action => 'destroy', :id => announcement.id }, :method => :delete %>
于 2013-10-15T14:07:19.967 に答える
-1

これは、これらのパスのルートに:method => :delete(パスの削除) & :method => :put(パスの更新) が必要なためです。POSTはどちらでも機能しません

Railsのドキュメントに従って:

Rails では、リソースの多いルートによって、HTTP 動詞と URL の間のマッピングがコントローラー アクションに提供されます。慣例により、各アクションはデータベース内の特定の CRUD 操作にもマップされます

announcement_pathURLヘルパーにも使用する必要があります

于 2013-10-15T12:53:41.650 に答える