コメントへのルーティングを追加する: 小林研 Rails Tips (65)

このページの内容は以下のリポジトリに1日遅れで反映されます(記事執筆前に前日分をコミットしています)。

https://github.com/hkob/hkob_blog

はじめに

Rails Tips の 65 回目です。Comment モデルを追加したので、それに対するルーティングを設定します。

Rails をはじめよう - Railsガイド

8.3 コメントへのルーティングを追加する

Rails ガイドでは、コメントを追加するコントローラのためのルーティングを追加します。ガイドではフラットなコントローラを使っていますが、ルーティングだけでなくコントローラもネストしたものにしようと思います。そのために controller を設定しています。

Rails.application.routes.draw do
  # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html

  # Reveal health status on /up that returns 200 if the app boots with no exceptions, otherwise 500.
  # Can be used by load balancers and uptime monitors to verify that the app is live.
  get "up" => "rails/health#show", as: :rails_health_check

  # Defines the root path route ("/")
  # root "posts#index"

  root "articles#index"
  resources :articles do
    resources :comments, controller: "articles/comments"
  end
end

bin/rails routes を確認すると以下のようになりました(該当箇所と余計なスペースを削除しています)。ガイドでは単に comments#index のようになっていましたが、articles namespace 内の comments#index になっています。今回の場合は、ネストの親が一つに限定されますが、複数の関連を持つモデルだと、ネスト元が別になることもあります。そのことも踏まえて普段からネストしたルーティングを記述するようにした方がいいと考えています。

    article_comments GET    /articles/:article_id/comments(.:format)          articles/comments#index
                     POST   /articles/:article_id/comments(.:format)          articles/comments#create
 new_article_comment GET    /articles/:article_id/comments/new(.:format)      articles/comments#new
edit_article_comment GET    /articles/:article_id/comments/:id/edit(.:format) articles/comments#edit
     article_comment GET    /articles/:article_id/comments/:id(.:format)      articles/comments#show
                     PATCH  /articles/:article_id/comments/:id(.:format)      articles/comments#update
                     PUT    /articles/:article_id/comments/:id(.:format)      articles/comments#update
                     DELETE /articles/:article_id/comments/:id(.:format)      articles/comments#destroy

おわりに

今日は座談会で時間がなかったので、ここまでにしておきます。明日は controller の作成とテストの雛形を作るところから再開します。