はじめに
備忘録的に書いておくので、少しちがっているところもあるかもしれません😭
説明も薄めです、ご了承ください。
Ruby on rails をつかって、Twitterアプリをつくっています。管理者が自分の投稿以外の、あらゆるユーザーの投稿を消せるようにしたいと思います。
ユーザー登録はGemのdeviseで実装しています。
Userに管理者を追加する
ターミナル
rails g migration AddAdminToUsers
xxxxxxxxx_add_admin_to_users
class AddAdminToUsers < ActiveRecord::Migration[6.0]
def change
add_column :users, :admin, :boolean, default: false #ここを追加
end
end
ターミナル
rails db:migrate
次にseedファイルに管理者権限を持つユーザーを追加します。
db/seeds.rb
User.create!(username: "管理者",
email: "admin@example.jp",
password: "11111111",
password_confirmation: "11111111",
admin: true)
ターミナル
rails db:seed
管理者用のコントローラーをつくる
ターミナル
rails g controller admin::tweets
controller/admin/tweets_controller
class Admin::TweetsController < ApplicationController
# before_action :authenticate_user!も必要なら書いてください!
before_action :if_not_admin
before_action :set_tweet, only: [:index, :new, :create, :show, :edit, :destroy] #onlyのアクションは必要なものだけ書いてください
#中略 def indexとか必要なものを書いてください!
private
def if_not_admin
redirect_to root_path unless current_user.admin?
end
def set_tweet
@tweet = Tweet.find(params[:id])
end
end
Routing設定
以下のコードを追加してください
config/routes
resources :tweets
namespace :admin do
resources :tweets, only: [:index, :new, :create, :show, :edit, :destroy]
end
viewの設定
好きなところにコードを追加してください
app/views/tweets/index.html.erb
<div class="tweets-container">
<% @tweets.each do |t| %>
<div class="tweet">
<%= t.user.email %>
<%= t.body %>
<%= t.created_at %>
<%= link_to "詳細へ", tweet_path(t.id) %>
<% if user_signed_in? && current_user.id == t.user_id %>
<%= link_to "編集する", edit_tweet_path(t.id) %>
<%= button_to "削除する", tweet_path(t.id), method: :delete %>
<% elsif user_signed_in? && current_user.admin? && current_user.id == t.user_id %>
<%= link_to "編集する", edit_tweet_path(t.id) %>
<%= button_to "削除する", tweet_path(t.id), method: :delete %>
<% end %>
<% if current_user.admin? %>
<%= link_to "管理者が削除するよ", tweet_path(t.id), method: :delete %>
<% end %>
</div>
<% end %>
</div>
おわりに
わたしは以上のコードで実装しましたが、ところどころ書かなくてもいい場所もあるかもしれません😭
あくまでも参考例ですので、ご自身で足りないところ足りてるところを試行錯誤していただけると助かります。
間違い等もございましたらコメントで教えていただけるとうれしいです!
よろしくお願いいたします
#参考サイト
【初心者向け】管理者ユーザーと管理者用controllerの追加方法[Ruby, Rails]
投稿の削除を投稿者と管理者どちらからもできるようにしたいです。