ありがとうございます
まずはじめにですが、
先ほど、過去に投稿したものについて、大変ありがたくご指摘いただきました。
返事の方法がイマイチわからず、改めて御礼申し上げます。
@shiozaki さんありがとうございます!勉強になりました!
はじめに
本記事では、PrefixとURIパターンについて、説明いたします。
先日に、ルーティングネストでケアレスミスをし、
エラー対処に何時間と費やしてしまいました。
先日投稿したものも後ほどご覧ください。
改めて、詳しく説明したいと思い投稿します。
Prefixとは
パスが入った変数のようなもので、
どのページに遷移したいかをパスとしてコードに記述する場合は、
末尾に「_path」を記載する必要があります。
#URIパターン
ルーティングのパスを表し、
このパスにてページに遷移した際に、指定のコントローラーとアクションで処理が実行されます。
ここにURIパターンに記載されているものは、遷移後のURLとほぼ同じです。
rails routesにて確認
例えですが、実際にrails routesしたものを添付します。
やや文字が小さいかもしれないです。すみません。
左から、
1番目:Prefix
2番目:HTTPメソッド
3番目:URIパターン
4番目:各テーブルのコントローラーとそれに対するアクションたち
使い方の例としては、
<%= link_to "by #{prototype.user.name}", user_path(prototype.user), class: "card__user" %>
などと記述をします。
「user_path(prototype.user)」は、画像でいうところの一番下の行を使用しており、
一番右を見るとおり、「users#show」。
つまり、ユーザー情報ページに遷移するためのパスということになります。
ちなみに、適当なユーザー情報のページに遷移した場合、
URLは以下の通りになります。
http://localhost:3000/users/3
*「3」は3番目にユーザー登録したため、レコードにidが3となっており、「3」と表示されております。
ちなみに、users#showのURIパターンは、「/users/:id(.:format)」
URLの最後の記載とほぼ同じです。
また、
user_path(prototype.user)の(prototype.user)
は、
誰のユーザー情報に遷移するのかを示すところになっています。
今回では、
「プロトタイプを投稿したユーザー(prototype.user)」の
「ユーザー情報に遷移user_path」するパス。ということです。
ルーティングネストによるケアレスミス
先日の投稿と内容はやや被ります。
resources :prototypes
resources :prototypes do
resources :comments, only: :create
end
resources :users, only: :show
resources :prototypes
resources :prototypes do
resources :comments, only: :create
resources :users, only: :show
end
この2つは、usersをネストしているか、していないかという違いです。
ネストしているかどうかでrails routesで記載されるものが違います。
つまり、ルーティングには気をつけろ!ということです。
終わりに
ネストのミスについては、ルーティングのエラーの一つとして挙げられるのではないでしょうか。
今後も気をつけて学習を進めます。
また、はじめに書きましたが、
ご指摘をいただけるということは非常にありがたくと感じております。
右も左もわからず行動し投稿し始めたことによって学べることを今回身をもって知ることができました。
これからもやってみようと思った時から行動し、アウトプットを積極的に行うよう心がけます。
それでは、引き続きがんばります!!