Cập nhật bài viết trong ruby on rails
Lượt xem: 1720
Chúng ta đã đề cập đến "CR" của CRUD. Bây giờ hãy chuyển sang chữ "U" (Update). Việc cập nhật thông tin bài viết rất giống với việc thêm mới bài viết. Cả hai đều là quy trình gồm nhiều bước. Trước tiên, người dùng yêu cầu một biểu mẫu (form) để chỉnh sửa dữ liệu. Sau đó người dùng gửi biểu mẫu (submit form). Nếu không có lỗi, thì bài viết được cập nhật. Ngược lại, biểu mẫu được hiển thị lại với các thông báo lỗi và quá trình này được lặp lại.
Các bước này thường được xử lý bởi các hành động (action) edit (chỉnh sửa) và update (cập nhật) của controller (bộ điều khiển). Tiếp theo trong controller app/controllers/articles_controller.rb chúng ta sẽ bổ sung thêm 2 action edit và update như sau:
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
private
def article_params
params.require(:article).permit(:title, :body)
end
end
Lưu ý cách các action edit và update và giống với action new và create.
Action edit tìm nạp bài viết từ cơ sở dữ liệu và lưu trữ nó trong @article để nó có thể được sử dụng khi xây dựng biểu mẫu. Theo mặc định action edit sẽ kết xuất app/views/articles/edit.html.erb.
<h1> Edit Article</h1>
<%= form_with model: @article do |form| %>
<div>
<%= form.label :title %> <br>
<%= form.text_field :title %>
<% @article.errors.full_messages_for(:title).each do |message| %>
<div><%= message %></div>
<% end %>
</div>
<div>
<%= form.label :body %><br>
<%= form.text_area :body %><br>
<% @article.errors.full_messages_for(:body).each do |message| %>
<div><%= message %></div>
<% end %>
</div>
<div>
<%= form.submit %>
</div>
<% end %>
Action update tái tìm nạp bài viết từ cơ sở dữ liệu và cố gắng cập nhật bài viết đó với dữ liệu biểu mẫu đã gửi được lọc bởi article_params. Nếu không có xác thực nào thất bại và cập nhật thành công, hành động này sẽ chuyển hướng trình duyệt đến trang của bài viết. Nếu không, hành động sẽ hiển thị lại biểu mẫu với thông báo lỗi bằng cách hiển thị app/views/articles/edit.html.erb
Video thao tác cùng dandev