見出し画像

CRUD を作成⑩

CRUD を作成⑨ の続き。
今回は削除の処理を作成していく。
app/controllers/books_controller.rb を以下のように修正する。

def destroy
  book = Book.find(params[:id])
  book.destroy
  redirect_to books_path
end

いつも通り、テストを実行する。レッドになるため、以下のようにspec/requests/books_spec.rb を修正する。

describe "DELETE /books/:id" do
  let(:book) { create(:book) }

  it "returns http no_content" do
    delete "/books/#{book.id}"
    expect(response).to have_http_status(:no_content)
  end
end

テストを実行してグリーンになることを確認する。
これで削除の処理が正常に動作することは担保できるようになった。
一覧ページに削除のリンクを設定するため、app/views/books/index.html.erb を以下のように修正する。

<% @books.each do |book| %>
  <%= link_to book.title, book_path(book) %>
  <%= link_to '編集', edit_book_path(book) %>
  <%= link_to '削除', book_path(book), data: { turbo_method: :delete } %><br />
<% end %>

これで削除が行えるようになり、CRUDの基本的な機能が完成した。
最後に seeds.rb を修正しておく。3文字より少ない文字でタイトルを保存できなくなるように変更したためである。本 から test に変更する。

book_attributes = (1..100).map { |n| { title: "test#{n}" } }

コマンドを実行して一度データをすべて削除し、再度登録し直す。

bundle e rails c
irb(main):001:0> Book.destroy_all

そして以下のコマンドを実行する。

bundle e rails db:seed

CRUDが完成した。

いいなと思ったら応援しよう!