第一部分:default resource routing

默认的routing

#复数resource,应用大部分场景
resources :photos #下面是默认生成的路由
GET             /photos                 photos#index      photos_path
GET             /photos/new             photos#new        new_photo_path
POST            /photos                 photos#create    
GET             /photos/:id             photos#show       photo_path(:id)
GET             /photos/:id/edit        photos#edit       edit_photo_path(:id)
PATCH/PUT       /photos/:id             photos#update     
DELETE          /photos/:id             photos#destroy

#单数resource, 应用在当前用户上
resource :geocoder
GET             /geocoder/new     geocoders#new        new_geocoder_path
POST            /geocoder         geocoders#create    
GET             /geocoder         geocoders#show       geocoder_path
GET             /geocoder/edit    geocoders#edit       edit_geocoder_path
PATCH/PUT       /geocoder         geocoders#update    
DELETE          /geocoder         geocoders#destroy

使用namespace(应用于分类)

#使用namespace,下面是一般用法,需要view中建立admin文件夹,controller中建立admin文件夹
namespace :admin do
  resources :articles
end
HTTP Verb    Path                        Controller#Action        Named Helper
GET          /admin/articles             admin/articles#index     admin_articles_path
GET          /admin/articles/new         admin/articles#new       new_admin_article_path
POST         /admin/articles             admin/articles#create    admin_articles_path
GET          /admin/articles/:id         admin/articles#show      admin_article_path(:id)
GET          /admin/articles/:id/edit    admin/articles#edit      edit_admin_article_path(:id)
PATCH/PUT    /admin/articles/:id         admin/articles#update    admin_article_path(:id)
DELETE       /admin/articles/:id         admin/articles#destroy   admin_article_path(:id)
#namespace第二种情况
#使用namespace中,view中不建立admin文件夹,controller中建立admin文件夹
#即是/articles (without the prefix /admin) to Admin::ArticlesController#
scope module: 'admin' do
  resources :articles, :comments
end
#或者
resources :articles, module: 'admin'
#namespace第三种情况
#使用namespace中,controller中不建立admin文件夹,view中建立admin文件夹
#即是/admin/articles to ArticlesController (without the Admin:: module prefix)
scope '/admin' do
  resources :articles, :comments
end
#或者
resources :articles, path: '/admin/articles'

nested resource(应用到association中)

#nested resources, 下面是一般用法
#magazine has many ads, ad belongs_to magazine
resources :magazines do
  resources :ads
end

#nested resources的第二种用法 shallow nesting
resources :articles do
  resources :comments, only: [:index, :new, :create]
end
resources :comments, only: [:show, :edit, :update, :destroy]
#或者
resources :articles do
  resources :comments, shallow: true
end
#或者
resources :articles, shallow: true do
  resources :comments
  resources :quotes
  resources :drafts
end
#或者
shallow do
  resources :articles do
    resources :comments
    resources :quotes
    resources :drafts
  end
end

#nested resources的第三种用法:shallow_path
scope shallow_path: "sekret" do
  resources :articles do
    resources :comments, shallow: true
  end
end
HTTP Verb    Path                                            Controller#Action    Named Helper
GET          /articles/:article_id/comments(.:format)        comments#index       article_comments_path
POST         /articles/:article_id/comments(.:format)        comments#create      article_comments_path
GET          /articles/:article_id/comments/new(.:format)    comments#new         new_article_comment_path 
GET          /sekret/comments/:id/edit(.:format)             comments#edit        edit_comment_path
GET          /sekret/comments/:id(.:format)                  comments#show        comment_path
PATCH/PUT    /sekret/comments/:id(.:format)                  comments#update      comment_path
DELETE       /sekret/comments/:id(.:format)                  comments#destroy     comment_path

#nested resources的第四种用法:shallow_prefix
HTTP Verb    Path                                            Controller#Action    Named Helper
GET          /articles/:article_id/comments(.:format)        comments#index       article_comments_path
POST         /articles/:article_id/comments(.:format)        comments#create      article_comments_path
GET          /articles/:article_id/comments/new(.:format)    comments#new         new_article_comment_path
GET          /comments/:id/edit(.:format)                    comments#edit        edit_sekret_comment_path
GET          /comments/:id(.:format)                         comments#show        sekret_comment_path
PATCH/PUT    /comments/:id(.:format)                         comments#update      sekret_comment_path
DELETE       /comments/:id(.:format)                         comments#destroy     sekret_comment_path

concerns routing(用于复用)

#使用concern代码
concern :commentable do
  resources :comments
end
resources :messages, concerns: :commentable

#和上面代码相同
resources :messages do
  resources :comments
end

通过对象指定url_path

#一般默认生成的helper方法,参数一般是id,比如article_path(:id),但是按照一般默认形式写的routes可以使用对象作为参数
resources :magazines do
  resources :ads
end
#上面的routes可以生

#magazine_ad_path
<%= link_to 'Ad details', magazine_ad_path(@magazine, @ad) %>
<%= link_to 'Ad details', url_for([@magazine, @ad]) %>
<%= link_to 'Ad details', [@magazine, @ad] %>

#magazine_path
<%= link_to 'Magazine details', @magazine %>

#edit_magazine_ad_path
<%= link_to 'Edit Ad', [:edit, @magazine, @ad] %>

定制action

#photos/1/preview
resources :photos do
  member do
    get 'preview'
  end
end
#或者
resources :photos do
  get 'preview', on: :member
end

#photos/search
resources :photos do
  collection do
    get 'search'
  end
end
#或者
resources :photos do
  get 'search', on: :collection
end

#photos/new/preview
resources :comments do
  get 'preview', on: :new
end

results matching ""

    No results matching ""