2020-11-12に投稿

2020.11.11 * 削除機能

本日のゴール

■ 英単語を削除できるようにする

削除アクション

ルーティングを確認するとdestroyアクションはword_pathのDELETEメソッドが割り当てられていました。
image.png
なぜ通常のgetルーティングではないのかと言うと、GETメソッドだとhtmlのaタグなどを使って削除を実行するリクエストが簡単に送れてしまうからなのですね。なるほど!! ※Railsガイドより

そういえばwordsコントローラを作成するとき
$ rails g controller Words new show edit delete
としたため、削除のアクションがdeleteになってました。

class WordsController < ApplicationController
  def new
  end

  def create
    @word = Word.new(word_params)
    @word.save
    redirect_to @word
  end

  def show
    @word = Word.find(params[:id])
  end

  def edit
  end

  def delete    #←これ
  end

  private
  def word_params
    params.require(:word).permit(:english, :japanese)
  end
end

deleteを消してdestroyの中身を書いていきます。
words_controller.rb

  def destroy
    @word = Word.find(params[:id])
    @word.destroy
    redirect_to word_path
  end

リダイレクト先をshow画面にしましたが、このままだと削除した単語を表示する画面に遷移させようとしてエラーになります。
なのでshowは全件表示するように変更します。

  def show
    @words = Word.all
  end

これに伴いshow.html.erbも変更。

<h1>SHOW</h1>
<div>
<% @words.each do |word| %>
    <div>
        ID: <%= word.id %> |
        ENGLISH: <%= word.english %> |
        JAPANESE: <%= word.japanese %>
    </div>
<% end %>
</div> 

こんな感じになりました。
image.png

削除view

どの画面で削除できるようにするかまだ考えていないので、とりあえずshow画面にボタンを置いておきます。
words/show.html.erb

<h1>SHOW</h1>
<div>
<% @words.each do |word| %>
    <div>
        ID: <%= word.id %> |
        ENGLISH: <%= word.english %> |
        JAPANESE: <%= word.japanese %>
        <%= button_to 'Delete', word_path(word), method: :delete %>
    </div>
<% end %>
</div> 

コントローラ作成時に作られたwords/delete.html.erbは要らないので削除。
http://localhost:3000/words/1にアクセスすると
image.png
ボタンが変な所にいますがとりあえず気にしない。

id=3のDeleteボタンを押してみます。
image.png
word3が消えました✨

宿題

全件表示する画面にhttp://localhost:3000/words/1でアクセスするっていうのはおかしいですね。
ちゃんと画面構成考えないと。

おわり*0 v 0

ツイッターでシェア
みんなに共有、忘れないようにメモ

view_list Ruby on Railsを使ったwebアプリ開発の記録
第2回 2020.11.9 * 最初のコントローラとWord・Chapterモデル
第3回 2020.11.10 * 英単語の登録機能
第4回 2020.11.11 * 削除機能
第5回 2020.11.12 * 単語の一覧表示
第6回 2020.11.16 * 編集機能

same0v0same

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント