2016-11-23 100 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 [:編號]''是nil' –

回答

1

你需要一個id傳遞給這條路線:

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

remove_entry潰敗e,沒有id的位置參數,在調用remove_entry_path時,不提供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

您收到params[:id]nil,這就是爲什麼你收到此錯誤

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

相同的結果。我有一個屬於這個用戶的所有條目的循環,在用戶 - > show view中就像「current_user.entries.each do | entry |」一樣。我嘗試通過「入門」,它不會工作。通過@entry也沒有。也許我錯過了一些細節?我新來的鐵軌... –

+0

這工作,如果你改變路線:'delete「remove_entry /:id」=>「entries#destroy」,:as =>「remove_entry」' – jphager2