1

これらの鉄道ルートを整理するためのより良い方法があるかどうか疑問に思っていました。おそらくグループで?私はこのようなもののベストプラクティスに慣れていません。

TestApp::Application.routes.draw do
  root :to => 'posts#index'
  resources :posts, :except => :destroy
  match '/posts/page/:page' => 'posts#page'
  match '/posts/delete/:id' => 'posts#delete'
  match '/posts/undelete/:id' => 'posts#undelete'
  match '/posts/hide/:id' => 'posts#hide'
  match '/posts/unhide/:id' => 'posts#unhide'
  match '/help' => 'help#index'
end
4

1 に答える 1

2

はいcollection、次のようにブロック内にネストされたブロックにグループ化できresources :postsます

resources :posts, :except => :destroy do
  collection do
    match 'page/:page'   => 'posts#page'
    match 'delete/:id'   => 'posts#delete'
    match 'undelete/:id' => 'posts#undelete'
    match 'hide/:id'     => 'posts#hide'
    match 'unhide/:id'   => 'posts#unhide'
  end
end

ただし、これらのルートはあまり RESTful ではありません。私は次のようなものを提案するかもしれません

resources :posts, :except => :destroy do
  member do
    get    'page/:page' => 'posts#page'
    delete 'delete'     => 'posts#delete'
    put    'undelete'   => 'posts#undelete'
    put    'hide'       => 'posts#hide'
    put    'unhide'     => 'posts#unhide'
  end
end

これにより、同じコントローラー/アクションを指しながら、よりクリーンなルートが作成されます。ただし、このより受け入れられた動作をサポートするには、アプリケーションを修正して、正しいルートを少し異なる方法で指すようにする必要があります。

              GET    /posts/:id/page/:page(.:format)   posts#page
  delete_post DELETE /posts/:id/delete(.:format)       posts#delete
undelete_post PUT    /posts/:id/undelete(.:format)     posts#undelete
    hide_post PUT    /posts/:id/hide(.:format)         posts#hide
  unhide_post PUT    /posts/:id/unhide(.:format)       posts#unhide
        posts GET    /posts(.:format)                  posts#index
              POST   /posts(.:format)                  posts#create
     new_post GET    /posts/new(.:format)              posts#new
    edit_post GET    /posts/:id/edit(.:format)         posts#edit
         post GET    /posts/:id(.:format)              posts#show
              PUT    /posts/:id(.:format)              posts#update
于 2012-12-20T20:28:50.517 に答える