<<前 [TOP]
レイアウトのサイドバーに各種機能に対するリンクを追加します。
「session」に「:user_id」がある場合のみ表示されるようにします。
【C:\Rails6\work\shop\app\views\layouts\application.html.erb】
<!DOCTYPE html> <html> <head> <title>Railsはじめてマート オンラインストア</title> <%= csrf_meta_tags %> <%= csp_meta_tag %> <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %> <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %> </head> <body> <header class="main"> <%= image_tag 'logo.png', alt: 'Railsはじめてマート', width: 80 %> </header> <section class="content"> <nav class="side_nav"> <div id="cart" class="carts"> <%= render_if @cart && @cart.line_items.any?, @cart %> </div> <ul> <li><a href="/">ホーム</a></li> <li><a href="/questions">質問</a></li> <li><a href="/news">ニュース</a></li> <li><a href="/contact">問い合わせ</a></li> </ul> <% if session[:user_id] %> <nav class="logged_in_nav"> <ul> <li><%= link_to '注文一覧', orders_path %></li> <li><%= link_to '商品登録', goods_path %></li> <li><%= link_to 'ユーザ管理', users_path %></li> <li><%= button_to 'ログアウト', logout_path, method: :delete %></li> </ul> </nav> <% end %> </nav> <main class='<%= controller.controller_name %>'> <%= yield %> </main> </section> </body> </html>
管理者を全て削除してしまうとログインできなくなり、ユーザの追加もできなくなってしまいます。
そのようなときはコマンドラインからユーザを追加します。
コマンドプロンプトで「rails console
」と入力し、「User.create(name: 'administrator', password: 'admin', password_confirmation: 'admin')」としてユーザを追加します。
最後のユーザを削除しようとした時にエラーを出すように「user.rb」モデルに「ensure_an_admin_remains()」メソッドを追加します。
【C:\Rails6\work\shop\app\models\user.rb】
class User < ApplicationRecord validates :name, presence: true, uniqueness: true has_secure_password after_destroy :ensure_an_admin_remains class Error < StandardError end private def ensure_an_admin_remains if User.count.zero? raise Error.new "最後のユーザは削除できません。" end end end
「users_controller.rb」の「destroy()」メソッドの下に例外処理を生成する記述を追加します。
【C:\Rails6\work\shop\app\controllers\users_controller.rb】
def destroy @user.destroy respond_to do |format| format.html { redirect_to users_url, notice: 'ユーザを削除しました。' } format.json { head :no_content } end end rescue_from 'User::Error' do |exception| redirect_to users_url, notice: exception.message end
これで最後のユーザを削除しようとしても削除できないようになりました。
↓↓クリックして頂けると励みになります。