削除機能を実装

削除機能を実装していきましょう!

システム周りはこれが最後ですね

まずはコントローラーのdestroyメソッドを編集

def destroy
  @content = Content.find(params[:id])
  @content.destroy
  redirect_to @content, status: :see_other
end

では解説

1行目

ここは今までもやりましたね

削除する対象のContentのIDを取得します

2行目

取得したIDのContentを削除します

3行目

削除したらTOPページ(index.html.erb)に飛ばします

TOPページに飛ばすなら

redirect_to contents_pathで良くね?

って思われるかと思います

実は後半の「status: :see_other」がめちゃくちゃ大事です

これについては後述します

     

    では放置していた削除ボタンを編集しましょう

    index.html.erbの削除ボタンは

    <%=link_to "削除", content_path(content), data: { turbo_method: 'delete', turbo_confirm: '削除していいですか?' }, class: 'btn-delete btn btn-danger' %>

    show.html.erbの削除ボタンは

    <%=link_to "削除", content_path(@content), data: { turbo_method: 'delete', turbo_confirm: '削除していいですか?' }, class: 'btn-delete btn btn-danger' %>

    コードについて解説します

    link_toで削除対象ContentのIDにアクセスするようにしてます

    この部分ですね(index.html.erb)

    content_path(content)

    そして今回はアクセスと言っても取得したIDのContentのViewに行くわけではなく、データベースにアクセスします

    そしてこれで

    data: { turbo_method: 'delete', turbo_confirm: '削除していいですか?' }

    削除をします

    turbo_confirm: '削除していいですか?'

    はオプションです

    なくてもいいですけど間違えて削除を防止します

    これがあることで削除ボタンを押した時に

    のようになります

    turboメソッドについて

    turboメソッドと言ってこれを使うことでJavaScriptの簡易的な命令を実行出来ます

    turboを使って削除するときは必ずdestroyメソッドのリダイレクトに「status: :see_other」をつけてください

    「status: :see_other」が無いと

    • 違うものが削除される場合がある
    • show.html.erb(詳細画面)から削除を実行した際に迷子になる

    ということがあげられます

    1つ目はもう読んでて明らかにやばいことですねw

    2つ目ですがこれ記載せずにshow.htmlから削除した場合

    みたいにエラーが出ます

    なんでTOPにリダイレクトさせてるのに!?

    って思うでしょう

    この質問は多く頂きます

    削除してからもその詳細画面に残ろうとします

    そしてその時にshowメソッドが発動してエラーが起きるんです

    ですからこの「status: :see_other」で迷子にならないようにします

    詳しく説明をすると今の段階だとわけが分からなくなります

    ですから今は形として覚えてください

    リピートアフターミー

    turboを使って削除するときは必ずdestroyメソッドのリダイレクトに「status: :see_other」をつける!

    メニューをつけて便利に

    さてシステムは完成したので今度は使いやすくしていきます

    新規作成に行ったりTOPに戻ったりするのに今はURLを打ち込んでますよね

    1,2回なら許せますがこれが毎回起こると二度とこのメモなんて使いません

    というわけでメニューバー的なのを作ってリンクを貼りましょう

    どの画面からでもメニューバーが見れるようにしたいので

    app/views/layouts/application.html.erb

    を編集しましょうか

    BootStrapを読み込ませたファイルですね

    ここを編集します

    <div class='mainContentView col-sm-8 offset-sm-2'>
      # この2行を追加
      <%= link_to 'TOP', contents_path, class: 'btn btn-primary' %>
      <%= link_to 'Add', new_content_path, class: 'btn btn-primary' %>
      <%= yield %>
    </div>

    これでOK

    TOPはindex.html.erbに飛ぶように

    Addはnew.html.erbに飛ぶように

    一応ルーティングを確認しておきましょうか

    熱い、熱い忘れ物

    ごめんなさい、一個忘れてました・・・。

    TOPのメモ一覧を見てください

    更新時間が表示されますが時間がおかしいですよね

    日本の時間では無いのでこれを日本時間に合わせます

    config/application.rbを開いてください

    module Memo
      class Application < Rails::Application
        # Initialize configuration defaults for originally generated Rails version.
        config.load_defaults 7.0
    
        # Configuration for the application, engines, and railties goes here.
        #
        # These settings can be overridden in specific environments using the files
        # in config/environments, which are processed later.
        #
        # config.time_zone = "Central Time (US & Canada)"
        # config.eager_load_paths << Rails.root.join("extras")
        # これを追加
        config.time_zone = 'Tokyo'
      end
    end

    サーバーを再起動して確認してください

    時間が正しく表示されてるはずです

    最終動作確認

    では各自最終動作確認をお願いします

    やってほしいことは

    1. サーバーを起動してindex.html.erbにアクセスしているか
    2. メニューボタンのAddから新規作成画面に飛べるか
    3. 新規作成画面からContentを作成できるか
    4. 「保存」を押したら新規作成したメモの詳細ページ飛べるか
    5. 詳細ページから編集で内容を書き換えて保存できるか
    6. 詳細ページから削除ができるか
    7. もう一つ新規作成してTOPページから削除ができるか
    8. これをお願いします

    次回、サーバーへアップロード

    いよいよ最終回です

    せっかく作ったものですからどこかにアップしてみんなに使ってもらえるようにしましょう

    今回はサンプルのアプリですがご自身でなにか作った時にアップロードする方法を学びます

    ここまで本当にお疲れさまでした

    サーバーにアップロードしよう

    コメントを残す

    メールアドレスが公開されることはありません。

    Rating

    wp-puzzle.com logo