我想创建一个按钮,从联系人列表中删除联系人。
目前我有以下设置:
联系人控制器
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 %>
由于 汤姆
答案 0 :(得分:1)
尝试这样的事情:
button_to "Delete", { :action => "delete", :id => contact.id}, :method => :delete
答案 1 :(得分:1)
如果仅在@user
中定义了create
,那么只有在调用create
的请求时才会存在{ - 1}}而且我猜你之前没有调用create
destroy
。每个浏览器请求都会创建一个新的控制器实例;像@user
这样的实例变量不会在请求之间留下来。
为了使它成功,你可能只需要这个:
def destroy
Contact.delete params[:contact]
end
(当您删除某个联系人时,如果您的关系以通常的方式设置,它将自动从例如current_user.contacts
中删除。)
答案 2 :(得分:1)
如果您要使用@user,则需要在删除方法中设置@user
,否则它将为nil - 因此出现错误消息
另一个问题是联系人的ID是params[:id]
而不是params[:contact]
我只是做
contact = current_user.contacts.find(params[:id])
contact.destroy
您肯定希望通过用户删除联系人,否则人们可以删除其他用户的联系人。这将删除联系人并将其从关联中删除 - 您无需执行任何其他操作