0

カテゴリ モデルに属するリンクを (ブラウザから) 破棄しようとしています。idof1category_idofを持つリンクは正常に削除できます1が、他の ID を持つリンクを削除しようとすると、次のようなエラーが発生します。

ActiveRecord::RecordNotFound in LinksController#destroy
Couldn't find Link with id=1 [WHERE "links"."category_id" = 1]

ID が 1 のリンクを削除しようとしているわけではないので、非常にイライラします。"category_id"=>"1", "id"=>"1"}しかし、どのリンクをクリックしても、常に を使用してリンクを削除しようとしているリクエスト パラメータが表示されます。私の開発データベースのリンクを見ると、それらが存在し、1 以外の ID を持っていることが確認されます...

LinksController#destroy のコードは次のとおりです。

class LinksController < ApplicationController

def destroy
    @category = Category.find(params[:id])
    @link = @category.links.find(params[:id])
    @link.destroy
    redirect_to category_url(@category)
end

これらの厄介なリンクを削除しようとしているビューのコードは次のとおりです。

<h1><%= @category.category %></h1>
<p><%=  @category.description %></p> 
<ul>
    <% @category.links.each do |link| %>
    <li>
    <%= link_to link.title, link.url %> |
    <%= link_to "delete", category_link_path(@category), :method => :delete %>
    </li>
 <% end %>

編集:追加されたパラメータ

{"_method"=>"delete",
 "authenticity_token"=>"[removed]",
 "category_id"=>"1",
 "id"=>"1"}

編集: config/routes.rb を追加:

LinkManager::Application.routes.draw do

  resources :categories do
    resources :links, only: [:create, :destroy]
  end

  root :to => 'categories#index'

私は何を見落としていますか?何か試すことはできますか?

4

2 に答える 2

1

あなたの呼び出しcategory_link_pathは何かを省略しています。おそらく、このように見えるはずですか?

<%= link_to "delete", category_link_path(@category, link), :method => :delete %>

category_idを渡すことでルートの一部を満たしているように見えますが、として@categoryも提供する必要があります。linkid

destroy次に、アクションを次のように修正する必要があります。

def destroy
  @category = Category.find(params[:category_id])
  @link = @category.links.find(params[:id])
  @link.destroy
  redirect_to category_url(@category)
end
于 2012-11-14T15:18:46.920 に答える
1

category_link_path では、カテゴリとリンクを渡す必要があります。何かのようなもの

category_link_path(@category, link)

また、コントローラでカテゴリを見つけるには、次のようになりますCategory.find(params[:category_id]

于 2012-11-14T15:19:12.927 に答える