Xóa một bản ghi trong ruby on rails
Lượt xem: 856
Cuối cùng, chúng tôi đến "D" (Delete - Xóa) của CRUD. Xóa tài nguyên là một quy trình đơn giản hơn so với tạo hoặc cập nhật. Nó chỉ yêu cầu một route (định tuyến) và một action (hành động) điều khiển. Và định tuyến của chúng ta (resources :articles) đã cung cấp route (tuyến đường) ánh xạ với yêu cầu DELETE /articles/:id tới action destroy của ArticlesController.
Vì vậy, hãy thêm action destroy vào app/controllers/articles_controller.rb, bên dưới action update:
class ArticlesController < ApplicationController
def index
@articles = Article.all
end
def show
@article = Article.find(params[:id])
end
def new
@article = Article.new
end
def create
@article = Article.new(article_params)
if @article.save
redirect_to @article
else
render :new, status: :unprocessable_entity
end
end
def edit
@article = Article.find(params[:id])
end
def update
@article = Article.find(params[:id])
if @article.update(article_params)
redirect_to @article
else
render :edit, status: :unprocessable_entity
end
end
def destroy
@article = Article.find(params[:id])
@article.destroy
redirect_to root_path, status: :see_other
end
private
def article_params
params.require(:article).permit(:title, :body)
end
end
Hành động hủy tìm nạp bài viết từ cơ sở dữ liệu và gọi hủy trên đó. Sau đó, nó chuyển hướng trình duyệt đến đường dẫn gốc với mã trạng thái 303
Chúng ta đã chọn chuyển hướng đến đường dẫn gốc vì đó là điểm truy cập chính của chúng ta cho các bài viết. Tuy nhiên, trong các trường hợp khác, bạn có thể chọn chuyển hướng đến ví dụ: articles_path.
Bây giờ, hãy thêm một liên kết ở cuối app/views/articles/show.html.erb để chúng ta có thể xóa một bài viết khỏi trang của chính nó:
<h1>>%= @article.title %></h1>
<p>>%= @article.body %></p>
<ul>
<li><%= link_to "Edit", edit_article_path(@article) %></li>
<li><%= link_to "Destroy", article_path(@article), data: {
turbo_method: :delete,
turbo_confirm: "Are you sure?"
} %></li>
</ul>
Trong đoạn mã trên, chúng tôi sử dụng tùy chọn dữ liệu để đặt thuộc tính HTML data-turbo-method và data-turbo-confirm của liên kết "Destroy".
Cả hai thuộc tính này móc vào Turbo, được bao gồm theo mặc định trong các ứng dụng Rails mới. data-turbo-method="delete" sẽ khiến liên kết thực hiện yêu cầu DELTE - XÓA thay vì yêu cầu GET - NHẬN. data-turbo-confirm="Are you sure?(Bạn có chắc không?)" sẽ khiến hộp thoại xác nhận xuất hiện khi nhấp vào liên kết. Nếu người dùng hủy bỏ (cancel) hộp thoại, yêu cầu sẽ bị hủy bỏ.
Và thế là xong! Bây giờ chúng tôi có thể liệt kê, hiển thị, tạo, cập nhật và xóa bài viết! Không thể chê vào đâu được!
Video