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

@userが でのみ定義されている場合はcreate、 を呼び出すリクエストに対してのみ存在しcreateます。ブラウザーの要求ごとに、コントローラーの新しいインスタンスが作成されます。のようなインスタンス変数は、リクエスト間で固執しません。createdestroy@user

それを機能させるには、おそらくこれが必要です:

def destroy
  Contact.delete params[:contact]
end

current_user.contacts(連絡先を削除すると、関係が通常の方法で設定されていると仮定すると、連絡先は自動的に削除されます。)

于 2012-04-25T22:51:04.217 に答える
1

@user を使用する場合は@user、delete メソッドで設定する必要があります。そうしないと、nil になるため、エラー メッセージが表示されます

もう1つの問題は、連絡先のIDがそうでparams[:id]あり、そうでないことですparams[:contact]

私はただするだろう

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

ユーザーを介して連絡先を削除したいのは間違いありません。そうしないと、他のユーザーの連絡先を削除できます。これにより、連絡先が削除され、関連付けから削除されます。他に何もする必要はありません。

于 2012-04-26T19:07:57.817 に答える