2012-04-25 109 views
0

我試圖簡單地創建一個按鈕,將從聯繫人列表中刪除聯繫人。Rails聯繫人應用程序聯繫人刪除

目前我有以下設置:

聯繫控制器

def destroy 
@user.contacts.delete(params[:contact]) 
@contact.delete 
end 

查看

<tbody> 
<% @contacts.each do |contact| %> 
    <tr>  
     <td><%= contact.name %></td> 
     <td><%= contact.company %></td> 
     <td><%= contact.email %></td> 
     <td><%= contact.phone %></td> 
     <td><%= contact.mobile %></td> 
     <td><%= button_to 'Delete', contact, :method => :delete %></td> 
    </tr> 
<% end %> 

路線

controller :contact do 
get "newcontact" => "contact#new" 
get "index" => "contact#index" 
delete "delete" => "contact#destroy" 
end 

我看了網上說使用button_to是首選方法,但此刻我收到以下錯誤:

undefined method `contacts' for nil:NilClass 

這將是巨大的得到任何反饋,可以幫助我解決這個問題。

在此先感謝 湯姆

爲尋找最後的答案就這一點,是

def destroy 
    contact = current_user.contacts.find(params[:id]) 
    contact.destroy 
    redirect_to index_path 
    end 

在我的控制器在我看來,以下

<%= button_to 'Delete', contact, :method => :delete %> 

謝謝 Tom

+1

在'ContactsController#delete'其中是@ user'定義的? – 2012-04-25 18:48:32

+0

爲什麼不在控制器上執行'Contact.delete(params [:id])'? – 2012-04-25 19:05:29

+0

@Jordan @user目前在我的創建'@user = current_user'的定義中定義。 @ismaelga我使用你的方法得到以下錯誤,你知道我怎麼能解決這個問題嗎?使用{:handlers => [:erb,:builder,:coffee],:formats => [:html],:locale => [:en,:en]}缺少模板contact/destroy,application/destroy。搜索:*「C:/ Sites/contact/app/views」' – 2012-04-25 21:42:35

回答

1

如果你是布萊恩使用@user你需要設置@user在您的刪除方法,否則這將是零 - 因此錯誤消息

的另一個問題是,在接觸的id爲params[:id],而不是params[:contact]

我只是做

contact = current_user.contacts.find(params[:id]) 
contact.destroy 

你一定要被刪除通過用戶的接觸,否則人們可以刪除其他用戶的聯繫人。這會刪除聯繫人並將其從關聯中刪除 - 您不需要執行其他任何操作

1

嘗試是這樣的:

button_to "Delete", { :action => "delete", :id => contact.id}, :method => :delete

+0

您可能還需要指定您的控制器。 – heavysixer 2012-04-25 18:37:50

+0

嘿Heavysixer,謝謝你的建議,但我得到的路由錯誤'無路由匹配{:行動=>「刪除」,:編號=> 11,:控制器=>「聯繫人」}我更新了我的問題與我聯繫人控制器的當前路由 - 如何正確定義此路由?謝謝 – 2012-04-25 21:38:09

+0

嘿湯姆,你的控制器的名字是什麼? – heavysixer 2012-04-26 16:03:11

1

如果@usercreate只被定義它一定會爲調用create - 和我猜你不destroy前右呼籲create請求存在。每個瀏覽器請求都會創建一個控制器的新實例;像@user這樣的實例變量不會在請求之間停留。

要使其工作,你可能只需要這樣:

def destroy 
    Contact.delete params[:contact] 
end 

(當你刪除聯繫人會自動從如current_user.contacts刪除假設你的關係通常的方式建立)

+0

嘿約旦,我剛剛嘗試實施您的解決方案,並得到以下錯誤'行動'顯示'無法找到ContactController' - 顯然有些東西是不正確的,因爲它鏈接到的URL是「http:// localhost:3000/contacts/12」。任何想法如何解決這個問題?乾杯湯姆 – 2012-04-26 17:28:18

+0

啊,在調用Contact.delete之後,我認爲你需要使用'redirect_to'來發送用戶希望他們在'destroy'之後去的地方。否則,它默認爲'show'(我猜)你剛剛刪除的記錄。 – 2012-04-26 17:37:02

+0

酷,我剛剛嘗試實現這一點,現在我的控制器中有'Contact.delete params [:contact] redirect_to index_path'和'<%= link_to「刪除」,contact,:method =>:delete%>'in my查看,但仍得到相同的'無法找到'Action'show'的ContactController錯誤。我的路由是「刪除」delete「=>」contact#destroy「'這個設置有什麼問題嗎?歡呼湯姆 – 2012-04-26 17:42:29