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が完成した。