#(delete)ユーザー削除機能を実装
ネット情報ではログイン機能 gem deviseをを前提としたのが多く当方初心者な為、まぁまぁ時間を食った。
後々の私の様な初心者の為にRailsチュートリアルを中心に改めて自分なりにまとめて見た。
#⒈管理者権限用カラムを作成
一般ユーザーと分ける為に管理者専用カラム作成。
$ rails generate migration add_admin_to_users admin:boolean
class AddAdminToUsers < ActiveRecord::Migration[5.0]
def change
add_column :users, :admin, :boolean, default: false
end
end
$ rails db:migrate
##⒉管理者権限を1人に与える
admin を true に。
User.create!(name: "Exaple User",
email: "example@railstutorial.org",
password: "foobar",
password_confirmation: "foobar",
admin: true )
$ rails db:migrate:reset
$ rails db:seed
##③ログインユーザーが管理者ならパーシャルの横にdelete ボタンを表示
この!current_user?(user)は自分自身の2つ目のアカウントでは管理者権限は無効に。
<div>
<%= gravatar_for user, size: 50 %>
<%= link_to user.name, user %>
<% if current_user.admin? && !current_user?(user) %>
| <% link_to "delete" user, method: :delete,
data: {confirm: "You sure?"} %>
<% end %>
</div>
current_user? が使えるように定義
def current_user?(user)
user == current_user
end
⒈ログインが前提なので、require_user_logged_inにdestroyを追加。
⒉管理者だけが削除できるように、admin_user, only: :destroyをbefore_actionに新たに作成。
⒊動作用destroyアクションを追加
before_action :require_user_logged_in, only: [:index, :show, :edit, :update, :destroy, :followings, :followers]
before_action :admin_user, only: :destroy #アクション前に事前確認用。
def destroy
User.find(params[:id]).destroy
flash[:success] = "ユーザー削除完了"
redirect_to users_path
end
private
#管理者か確認。
def admin_user
redirect_to(root_path) unless current_user.admin?
end
あとは実際に動作確認するだけ。
もしエラーが出たら、こちらも参照。
ユーザー削除するってことは、関連するデータの処理もどうするのか?
https://qiita.com/shutyan/items/05977055b2ce32c2e322