rails 管理者が全Userの投稿削除をする(備忘録)
はじめに
備忘録的に書いておくので、少しちがっているところもあるかもしれません😭
説明も薄めです、ご了承ください。
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
rails g migration AddAdminToUsers
class AddAdminToUsers < ActiveRecord::Migration[6.0]
def change
add_column :users, :admin, :boolean, default: false #ここを追加
end
end
rails db:migrate
次にseedファイルに管理者権限を持つユーザーを追加します。
User.create!(username: "管理者",
email: "[email protected]",
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設定
rails g controller admin::tweets
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
以下のコードを追加してください
resources :tweets
namespace :admin do
resources :tweets, only: [:index, :new, :create, :show, :edit, :destroy]
end
viewの設定
好きなところにコードを追加してください
<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]
投稿の削除を投稿者と管理者どちらからもできるようにしたいです。
Author And Source
この問題について(rails 管理者が全Userの投稿削除をする(備忘録)), 我々は、より多くの情報をここで見つけました https://qiita.com/yui_vagyok/items/c2b7f70d0e322a79010a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .