+2

Những kĩ thuật routing trong Rails

Routing là kĩ thuật điều hướng thông qua các URL được gửi lên từ trình duyệt đến các action trong Controller. Routes chính là cầu nối giao tiếp chính khi người dùng thao tác với website. Chính vì vậy mà việc routing rất quan trọng, tạo ra các URL thân thiện, tường minh với người dùng nhưng vẫn đáp ứng đủ yêu cầu về mặt kĩ thuật về phía server. Routing xuất hiện ở hầu hết các framework phổ biến. Ở bài viết này tôi sẽ giới thiệu với mọi người về các kĩ thuật Routing trong Rails.

  • Resources

Resources sẽ tạo ra 7 routes mặc định ánh xạ đến 7 action trong controller: [ :index, :new, :create, :show, :edit, :update, :destroy] Ví dụ khi bạn muốn tạo routes cho đối tượng user

#config/routes.rb
resources :user

Để kiểm tra các routes đang có trong project, chúng ta gõ lệnh rails routes, trong trường hợp trên, 7 routes được tạo ra sẽ có dạng: Trong đó: * Prefix: là đường dẫn rút gọn thay cho cách viết như URI * Verb: là method HTTP ứng với mỗi route * URI: là đường dẫn ứng trên thanh URL của website * Controller#Action: là Action được thực thi khi mà route được gọi

  • Nested Resources

Nested Resources dùng để phản ánh mối quan hệ 1-n giữa các model trong routes và thể hiện qua URLs, ví dụ như một Room có nhiều Report và một Report phải thuộc về một Room thì Rails cho phép thiết lập các tài nguyên lồng nhau. Việc thiết lập Nested Resources sẽ giúp quản lý tài nguyên tốt hơn, khoa học hơn. Cách viết:

#config/routes.rb
resources :rooms do
    resources :report
 end

Khi chạy rails routes: Nếu viết như trên thì sẽ tạo ra tất cả 14 routes chia đều cho room và report. Để ý URI Pattern của report thì có thể thấy chúng đều gắn với room.

  • Resource

Resource sẽ chỉ tạo ra 6 routes, không có index. Ngoài ra khi Resource các routes sẽ không sử dụng đến :id.

#config/routes.rb
resource :rooms

Khi chạy rails routes:

  • Namespace

Namespace giúp phân nhóm, tạo ra tiền tố để dễ phân biệt và quản lý routes. Ví dụ chúng ta muốn phân biệt các routes của admin

#config/routes.rb
namespace :admins do
    resources :rooms
end

Khi rails routes: Các routes đã có thêm tiền tố admin.

  • collection và member

Cả 2 options trên đều được dùng trong resources để tạo routes ánh xạ tới các method không phải mặc định(:index, :new,...) trong controller. Điểm khác nhau là collection không sử dụng id từ resources chứa nó. Cách viết:

#config/routes.rb
resources :rooms do
    collection do
      get :search
    end
end

Còn member có sử dụng id từ resources chứa nó. Ở ví dụ này là id của room.

#config/routes.rb
resources :rooms do
    member do
      get :search
    end
end

  • only: , except:

Nếu không muốn tạo ra cả 7 routes như mặc định của resources thì có thể sử dụng: only: chỉ lấy các routes đã chỉ định except: bỏ qua các routes đã chỉ định Quay lại ví dụ resources :user nếu chỉ muốn tạo ra 2 routes [:index, :new] thì chúng ta sử dụng only như sau:

#config/routes.rb
resources :user, only: [:index, :new]

Sẽ có 2 routes được tạo ra là :index và :new.

Ngược lại khi không muốn tạo các routes [:index, :new], thì chúng ta thay only thành except :

#config/routes.rb
resources :user, only: [:index, :new]

Sẽ có 5 routes được tạo ra ngoại trừ :index và :new

  • Lời kết

Bài viết này mình có tham khảo tại: https://guides.rubyonrails.org/routing.html Cảm ơn mọi người đã đọc ^^


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí