Hiển thị chi tiết bài viết trong ruby on rails

Lượt xem: 990

Hầu như tất cả các ứng dụng web liên quan đến các hoạt động CRUD (Create (tạo), Read (đọc), Update (cập nhật),  Delete (xóa)). Bạn thậm chí có thể thấy rằng phần lớn công việc mà ứng dụng của bạn làm là crud. Rails thừa nhận điều này và cung cấp nhiều tính năng để giúp đơn giản hóa mã CRUD.

Chúng ta đã bổ sung view hiển thị tất cả bài viêt từ database.  Hiển thị danh sách bài viết trong ruby on rails

Chúng ta cần bổ sung thêm một router mới ánh xạ vào hành động (action) trong controller. Mở file config/routes.rb và chèn router mới vào dòng cuối như sau:


Rails.application.routes.draw do
  root "articles#index"

  get "/articles", to: "articles#index"
  get "/articles/:id", to: "articles#show"
end

Router mới của chúng ta với phương thức get và có thêm :id trên đường dẫn của nó. Điều này chỉ định một router có tham số (parameter). Một router chứa tham số nắm bắt một phân đoạn của đường dẫn của yêu cầu và đặt giá trị đó vào Hash (băm)  tham số, có thể truy cập bằng actiont trong controller. Ví dụ: khi xử lý một yêu cầu như nhận http://localhost:3000/article/1, 1 sẽ được ghi là giá trị cho :id, sau đó có thể truy cập được dưới dạng params [: id] trong action show của Articlescontroll.

Bây giờ chúng ta cần bỏ sung thêm action show bên dưới action index trong file app/controllers/articles_controller.rb như sau:


class ArticlesController < ApplicationController
  def index
    @articles = Article.all
  end

  def show
    @article = Article.find(params[:id])
  end
end

Trong action show sẽ gọi Article.find với tham số ID trong router tham số. Bài viết được trả về lưu trong biết @article, do đó nó có thể truy cập được từ view. Theo mặc định action show sẽ kết xuất app/views/articles/show.html.erb

Tiếp theo chúng ta cùng tạo file app/views/articles/show.html.erb với nội dung:


<h1><%= @article.title %></h1>

<p><%= @article.body %></p>

Bây giờ chúng ta truy cập http://localhost:3000/articles/1 để xem thành quả nhé.

Để hoàn thành chúng ta bổ sung liên kết từ trang danh sách app/views/articles/index.html.erb vào chi tiết cho thuận tiện với nội dung như sau:

 


<h1> Articles>/h1> 

<ul> 
  <% @articles.each do |article| %> 
    <li> 
     <a href="/articles/<%= article.id %>"> 
        <%= article.title %> 
      </a> 
    </li> 
  <% end %>
</ul> 

Xem video thao tác cùng dandev. Trong video dandev có sử dụng bootstrap được nhúng từ bài trước nên các tag có thể khác đôi chút nhé