塩焼きブログ

塩焼きに関しての研究内容を公開しています

Rails routes.rbのresourcesについて

Railsroutes.rbで使えるresourcesは自動でレコードの一覧・表示・作成・更新・削除のルーティングを生成してくれる。get, post, patch, destroyを自分で書いて一つずつ手動で設定しても良いが、Railsの提供するルーティングをなるべく採用したい。

# routes.rb
resources :posts

このように記述しコマンドラインrake routesを実行すると現在のルーティングを確認できる

    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
          PATCH  /posts/:id(.:format)            posts#update
          PUT    /posts/:id(.:format)            posts#update
          DELETE /posts/:id(.:format)            posts#destroy

ただし、このようなルーティングは公開するアプリケーションでは使わない。公開を行うアプリケーションで、レコードの操作はログイン後ダッシュボードで行うといったアプリケーションのルーティングは下記のようなものが望ましいのではないか。

resources :posts, except: [:new, :create, :edit, :update, :destroy]
namespace :dashboard do
  resources :posts, except: [:show]
end

こう書いてrake routesを実行する

              posts GET    /posts(.:format)                     posts#index
               post GET    /posts/:id(.:format)                 posts#show
    dashboard_posts GET    /dashboard/posts(.:format)           dashboard/posts#index
                    POST   /dashboard/posts(.:format)           dashboard/posts#create
 new_dashboard_post GET    /dashboard/posts/new(.:format)       dashboard/posts#new
edit_dashboard_post GET    /dashboard/posts/:id/edit(.:format)  dashboard/posts#edit
     dashboard_post PATCH  /dashboard/posts/:id(.:format)       dashboard/posts#update
                    PUT    /dashboard/posts/:id(.:format)       dashboard/posts#update
                    DELETE /dashboard/posts/:id(.:format)       dashboard/posts#destroy

これで基本のデータ操作のルーティングは自動で生成できた。ログインの実装についてここでは触れないが、/dashboard以下にはログインしていなければアクセスできないものとする。

このようにresourcesを使えばroutes.rbの記述もすっきりする。これに加えて検索ページなどを実装する時に、手動でのルーティング設定を行うのが良いのではないか。