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 only
và except
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 member
và collection
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é!