Xóa một bản ghi trong ruby on rails

Lượt xem: 745

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-methoddata-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