2016-11-23 6 views
1

は、だから私は、 "エントリー" そのようなユーザモデルとネストされたモデルを持っている:Rails 4:ネストされたオブジェクトを削除するにはどうすればよいですか?

user.rb

class User < ActiveRecord::Base 

    has_many :entries 
    ... 

end 

entry.rb

class Entry < ActiveRecord::Base 

    belongs_to :user 
    ... 

end 

ユーザー/ show.html.erb

<p><%= link_to 'Destroy', remove_entry_path, method: :delete, data: { confirm: 'Are you sure?' } %></p> 

routes.rb

resources :users do 
    resources :entries 
end 
... 
delete "remove_entry" => "entries#destroy", :as => "remove_entry" 

entries_controller.rb

def destroy 

    @user = current_user 
    @user.entries.find(params[:id]).destroy 

    respond_to do |format| 
     format.html { redirect_to user_path(current_user), notice: 'Entry was successfully destroyed.' } 
     format.json { head :no_content } 
    end 

    end 

そして、私はこのエラーを取得する:この行の

はIDなしでエントリが見つかりませんでした

@user.entries.find(params[:id]).destroy 

何午前私は間違っている?

+0

私は 'paramsは思い[:ID]' 'nil' –

答えて

1

あなたはこのルートにIDを渡す必要があります。

delete "remove_entry" => "entries#destroy", :as => "remove_entry" 

remove_entry rout eにはidの位置パラメータはなく、remove_entry_pathへの呼び出しではIDパラメータを指定しません。 【:ID]なぜあなたのコントローラのアクション、paramsはである

==ゼロ

ソリューション

は、ID

<p><%= link_to 'Destroy', remove_entry_path(id: @entry.id), method: :delete, data: { confirm: 'Are you sure?' } %></p> 

または経路の位置パラメータを追加合格とidをurlヘルパーに渡す。

# config/routes.rb 
delete "remove_entry/:id" => "entries#destroy", :as => "remove_entry" 

<!-- in view --> 
<p><%= link_to 'Destroy', remove_entry_path(id: @entry.id), method: :delete, data: { confirm: 'Are you sure?' } %></p> 
+0

ありがとう! –

0

あなたはnilとしてparams[:id]を受けているし、それはあなたがルートヘルパーと

Couldn't find Entry without an ID

パス@entryオブジェクトこのエラーを得ている理由です

<p><%= link_to 'Destroy', remove_entry_path(@entry), method: :delete, data: { confirm: 'Are you sure?' } %></p> 
+0

が同じ結果です。 "current_user.entries.each do | entry |"のようなユーザー表示ビューでこのユーザーに属するすべてのエントリのループがあります。私は "エントリ"を通過しようとしたが、それは動作しません。どちらも@entryを渡しませんでした。たぶん私はいくつかの詳細が不足していますか?私はレールに新しいです... –

+0

あなたがルートを変更した場合、これは動作します: 'delete" remove_entry /:id "=>"エントリ#破棄 "、:as =>" remove_entry "' – jphager2

関連する問題