.idと_id 違いについて ruby rails ルーティングのネスト 親子関係

〇〇.idでしかうまくいかない時と〇〇_idでしかうまくいかない時ありますよね

一度は学習したんですがふと疑問に思い説明できなかったので自分の解釈で説明してみます。

 

まず基本は〇〇.idなど「.」を使うことで解決できます。

ではなぜ〇〇_idのような時が発生するんでしょうか?

 

それはルーティングのネストにあります。

ルーティングにおけるネスト(親子関係を示す)とは、コントローラーのルーティングの中に、別のコントローラーのルーティングを記述することです。

 

f:id:iggy-neko:20211130180649p:plain

こうなると「 _ 」が発生してしまいます。

itemsの中にordersがいますよね、これで親がitems 子がorders になります。

なぜかというと、

 

f:id:iggy-neko:20211130180934p:plain

大きくできないので虫眼鏡使ってください笑

 

真ん中にいますよね「 _ 」が!!!こいつのせいなんです。

ここで決められているんです!

この場合 :item_id としなければ値を取得できません。

つまりルーティングのネスト(親子関係)によって「 _ 」が生まれ

子が親のidを受け取るためには「 _ 」を使う必要があるのです。

 

じゃーネストなんかしないでいいじゃん

 

と思いますよね。

 

ルーティングをネストさせる一番の理由は、アソシエーション先のレコードのidを

paramsに追加してコントローラーに送るためです。

つまりどうアソシエーションするかで決まってしまってるんです。

 

偉そうにまとめましたが初めて見たような気持ちで復習してます。

間違っていたら何かこうした方がいいなど指摘してください。