Rails ルーティングのネスト
28日目です。
わけが分からず苦しめられてきたRailsの「ルーティングのネスト」が少し分かりました。
ルーティングのネストとは?
・一言でいうと、「アソーシエーションしたモデルの親子関係を、ルーティング で入れ子構造にして表しているもの」
説明
下記のモデルでは、「ad(広告)」と「magazine(雑誌)」アソシエーションを組んでいます。
app/models/magazine.rb
class Magazine < ApplicationRecord has_many :ads end
app/models/ad.rb
class Ad < ApplicationRecord belongs_to :magazine end
magazine(雑誌)は多数のad(広告)を持っているという「has_many 」の関係、多数のad(広告)は一つのmagazine(雑誌)に所属している「belongs_to」の関係ですね。
この時、下記のように入れ子(ネスト)にすると、親子関係をルーティングで表すことができます。
resources :magazines do resources :ads end
ここまではカリキュラムの説明などを見ればやっていることは分かりますが、 なぜこんなことをするのか?が疑問で仕方ありませんでした。
参照したRubyリファレンスの表をみて、何故このようなことをしているのかが分かりました。
例えば、ビューからルーティングにHTTPメソッド「Get」パス「/magazines/:magazine_id/ads」を送ると、adsコントローラのindexアクションで、「ある雑誌1冊に含まれる広告を全て表示する」としてるんですね。
これが仮にネストしないとしたら、ただ「ある雑誌の情報を表示する」または「広告を全て表示する」などしかできないわけです。
参照: railsguides.jp
本日は気分転換+運動不足解消のため1.5ヶ月ぶりに蒸し風呂の体育館で2時間卓球の練習をしましたが、終わった後は頭痛と疲労のオンパレードでした。汗をかかない生活をしているので耐性がどんどんなくなっていくので、定期的な運動は必要ですね。
本日の模試は56点でした。10→34→36→56ときているので、明日の本試験では合格点の70以上とりたいですね。何回も同じアルゴリズム問題を見ていると、だんだんと配列とハッシュを使った文字列や値の入れ方、取り出し方などが分かってきて面白いです。