0

我试图简单地创建一个按钮,该按钮将从联系人列表中删除联系人。

目前我有以下设置:

联系人控制器

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 %>

谢谢汤姆

4

3 回答 3

1

尝试这样的事情:

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

于 2012-04-25T18:37:22.833 回答
1

If@user只定义在create它只存在于调用的请求中create——我猜你create之前没有调用destroy。每个浏览器请求都会创建一个新的控制器实例;像这样的实例变量@user不会在请求之间停留。

为了使它工作,你可能只需要这个:

def destroy
  Contact.delete params[:contact]
end

(当您删除联系人时,它将自动从其中删除,例如current_user.contacts假设您的关系是以通常的方式设置的。)

于 2012-04-25T22:51:04.217 回答
1

如果您打算使用@user,您需要@user在您的删除方法中设置,否则它将为零 - 因此错误消息

另一个问题是联系人的 id 是params[:id]而不是params[:contact]

我只想做

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

您肯定希望通过用户删除联系人,否则人们可以删除其他用户的联系人。这会删除联系人并将其从关联中删除 - 您无需执行任何其他操作

于 2012-04-26T19:07:57.817 回答