Rails3 の routes.rb に独自定義を追加する
通常の CRUD 操作に必要なルーティングの定義は resources でまかなえますが、よくある確認画面を挟む時のルーティングについて説明します。新規作成時の確認画面を confirm_create に、更新確認画面を confirm_update にそれぞれネーミングします。また、モデルの名前は post とします。
まず通常の CRUD 操作を定義する
config/routes.rb を開いて、通常の resources を記述します。scaffold を使うとここは自動的に定義してくれるはずです。
resources :posts
新規作成確認のルーティングを追加する
新規作成の確認時には(通常の場合なら)まだデータは保存されていないため、特定の id には依存しません。なので、この場合のアドレスは /posts/confirm_create のようになります。これを表現するには、以下のように記述します。
resources :posts do collection do post :confirm_create end end
上では POST でルーティングを作りましたが、他の方法も使えます。検索機能を GET で実装するなら以下のように追記します。
resources :posts do collection do post :confirm_create get :search end end
また、複数のアクションを collection で定義しないのであれば、一行で記述する方が短く済みます。
resources :posts do post :confirm_create, :on => :collection end
更新確認のルーティングを追加する
更新の場合、既存のデータに操作を行うのでアドレスは /posts/:id/confirm_update のようになります。この場合は member を使います。
resources :posts do collection do post :confirm_create end member do post :confirm_update end end
その他
現在のルーティングをコマンドから確認する時は
bundle exec rake routes
で一覧表示できます。何かおかしいと思った時は確認してみると気がつく事もあるかもしれません。