+1

10 Mẹo Dùng Routes Trong Rails Hiệu Quả Hơn

File config/routes.rb là nơi định nghĩa luồng request – response của ứng dụng Rails. Khi biết cách tổ chức và tối ưu route, chúng ta không chỉ giúp code sạch hơn mà còn làm app dễ bảo trì và mở rộng. Dưới đây là 10 mẹo giúp bạn làm chủ hệ thống route trong Rails.

1. Ưu tiên sử dụng resources thay vì viết thủ công

# Good
resources :posts

# Bad
get '/posts', to: 'posts#index'
post '/posts', to: 'posts#create'

👉 Sử dụng resources giúp tự động tạo đầy đủ các route RESTful.

2. Giới hạn route với onlyexcept

Chỉ định rõ những action nào bạn cần:

resources :posts, only: [:index, :show]
resources :comments, except: [:destroy]

👉 Tránh tạo ra những route không sử dụng, giúp giảm bớt nguy cơ bảo mật.

3. Tổ chức route theo namespace hoặc scope

namespace :admin do
  resources :users
end

Sinh ra: /admin/users, controller: Admin::UsersController.

Hoặc dùng scope để nhóm route mà không đổi controller:

scope '/v2' do
  resources :products
end

👉 Phù hợp cho versioning API hoặc tách biệt backend/frontend.

4. Dùng concern để tái sử dụng nhóm routes

Khi nhiều resource dùng chung logic như like, comment:

concern :commentable do
  resources :comments
end

resources :posts, concerns: :commentable
resources :videos, concerns: :commentable

👉 Viết một lần, tái sử dụng nhiều nơi – DRY (Don't Repeat Yourself).

5. Dùng membercollection cho route tùy chỉnh

resources :posts do
  member do
    get :preview
  end

  collection do
    get :archived
  end
end
  • member: áp dụng cho một bản ghi (/posts/:id/preview)
  • collection: áp dụng cho toàn bộ (/posts/archived)

6. Sắp xếp route theo nhóm logic

Chia rõ các phần trong file routes.rb theo module hoặc theo domain:

# Public
resources :posts
resources :users

# Admin
namespace :admin do
  resources :posts
end

👉 Giúp file routes.rb dễ đọc và tìm kiếm hơn khi project lớn.

7. Đặt tên route để dễ gọi trong view/controller

get 'dashboard', to: 'admin#dashboard', as: :admin_dashboard

// Gọi trong view
<%= link_to 'Dashboard', admin_dashboard_path %>

👉 Tránh viết tay URL, code dễ bảo trì hơn.

8. Kiểm tra toàn bộ routes bằng rails routes

rails routes | grep posts

👉 Dễ dàng xem tất cả routes đã được định nghĩa, tìm lỗi nhanh.

9. Cẩn thận với route động (match, :any)

Tránh dùng match ':anything', via: :all trừ khi cần xử lý đặc biệt như 404 page.

👉 Các route này có thể “bắt” mọi request và gây khó debug.

10. Dùng constraint khi cần kiểm soát route nâng cao

constraints subdomain: 'admin' do
  get 'dashboard', to: 'admin#dashboard'
end

// Hoặc với regex:
get '/:username', to: 'profiles#show', constraints: { username: /[A-Za-z0-9_\.]+/ }

👉 Tạo route thông minh và đúng ngữ cảnh với user.

Kết luận

Một hệ thống route gọn gàng, rõ ràng giúp ứng dụng Rails dễ bảo trì, mở rộng và tránh lỗi khó chịu. Hãy coi routes.rb như “bản đồ” của ứng dụng – giữ nó sạch sẽ là điều rất đáng làm.

Bạn đang dùng những mẹo nào trong route hiện tại? Comment chia sẻ thêm nhé!


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í