当需要为一个 RESTful 资源添加动作时(你真的需要吗?),应使用
member路由和collection路由。# 差get 'subscriptions/:id/unsubscribe'resources :subscriptions# 好resources :subscriptions doget 'unsubscribe', on: :memberend# 差get 'photos/search'resources :photos# 好resources :photos doget 'search', on: :collectionend
当需要定义多个
member/collection路由时,应使用块结构。resources :subscriptions domember doget 'unsubscribe'# 更多路由endendresources :photos docollection doget 'search'# 更多路由endend
使用嵌套路由(nested routes),它可以更有效地表现 ActiveRecord 模型之间的关系。
class Post < ActiveRecord::Basehas_many :commentsendclass Comments < ActiveRecord::Basebelongs_to :postend# routes.rbresources :posts doresources :commentsend
使用命名空间路由来归类相关的动作。
namespace :admin do# 将请求 /admin/products/* 交由 Admin::ProductsController 处理# (app/controllers/admin/products_controller.rb)resources :productsend
不要使用旧式的控制器路由。这种路由会让控制器的所有动作都通过 GET 请求调用。
# 非常差match ':controller(/:action(/:id(.:format)))'
不要使用
match来定义任何路由,除非确实需要将多种请求映射到某个动作,这时可以通过via选项来指定请求类型,如[:get, :post, :patch, :put, :delete]。
