私のアプリケーションには、ユーザーがサインアップできるユーザーアカウントがあります。セットアップにはdevise
gemを使用します。
また、サイトに登録されているすべてのユーザーとdestroy
リンクを一覧表示するユーザーページもあります。管理者がユーザーを削除して、このユーザーリストページにリダイレクトできるようにしたいと思います。しかし、リンクをクリックして特定のユーザーを破棄すると、ユーザープロファイルページにリダイレクトされるだけで、データベースからユーザーは削除されません。
誰かが理由を知っていますか?
**更新:推奨されるように以下のコードを更新し、現在機能しています。
users_controller.rb
def destroy
@user = User.find(params[:id])
@user.destroy
if @user.destroy
redirect_to root_url, notice: "User deleted."
end
end
users/index.html.erb
<div class = "container">
<div id="usersview">
<b>USERS DIRECTORY</b>
<%= render @users %>
</div>
<center>
<%= will_paginate @users %>
</center>
</div>
users/_user.html.erb
<div class="comments">
<%= link_to user.name, user %>
<% if current_user.try(:admin?) && !current_user?(user) %>
<%= link_to "Destroy", admin_destroy_user_path(user), method: :delete, data: { confirm: "You sure?" } %>
<% end %>
</div>
routers.rb
devise_for :users
match 'users/:id' => 'users#destroy', :via => :delete, :as => :admin_destroy_user
match 'users/:id' => 'users#show', as: :user
resources :users
Deviseは、この機能をそのままでは提供していません。独自の破棄アクションを作成しましたが、そのアクションへのカスタムルートも作成する必要があります。
あなたのルートで:
match 'users/:id' => 'users#destroy', :via => :delete, :as => :admin_destroy_user
そして、リンクを作成するとき:
<%= link_to "Destroy", admin_destroy_user_path(user), method: :delete, data: { confirm: "You sure?" } %>
Devise 4.1のレーキルートとビューによると、以下を使用すると、ユーザーとしてログインしたアカウントを削除するのに役立ちます。
<%= link_to "Cancel my account", registration_path(current_user), data: { confirm: "Are you sure?" }, method: :delete %>
私はあなたがあなたのroutes.rbにいると思います:resources :users
問題は、クリックしたときに削除するユーザーを渡していないことです。
users/_user.html.erb
<%= link_to "Destroy", user, method: :delete, data: { confirm: "You sure?" } %>
2番目のパラメーターで、ser_urlの代わりにserを追加したことを確認してください。
users_controller.rb
def destroy
@user = User.find(params[:id])
if @user.destroy
redirect_to root_url, notice: "User deleted."
end
end
コントローラで@ user.destroyを削除しました。あなたはそれを二度呼んでいました。
それが役に立てば幸い!
または、Rails cから、「x」がユーザーIDである次のようなことができます。
user = User.where(id: x)
user.destroy(1)