leaning diary Rails

【Learning Diary19】リソースにデフォルト以外のルーティングを追加したいとき

24/10/2023

【Learning Diary19】リソースにデフォルト以外のルーティングを追加したいとき

リソースに対してデフォルトで作成されるルーティング

 

Railsでは、リソースベースのルーティングを使うことで、リソースのコントローラに対する共通のルーティングを簡単に書くことができます。

 

resourcesを宣言するだけで、コントローラのindexshowneweditcreateupdatedestroyアクションを使える状態になります。

 

各アクションを個別に宣言する必要はありません。

 

ルーティングヘルパー

 

ルーティングをリソースで作成するとルーティングヘルパーが使えるようになります。

 

ルーティングヘルパーには、_pathヘルパーと、それぞれに対応する_urlヘルパーがあります。

 

リソースを追加する

 

リソースを定義することでデフォルトのルーティングは作成されますが、ときにデフォルト以外のリソースの追加が必要なケースがあります。

 

ルーティングを追加したいときには、メンバー(member)ルーティングとコレクション(collection)ルーティングが使えます。

 

2つのちがいは、作成されるURLにidを含めるかどうかです。

 

member : idを含めたURLを生成

collection:idを含めないURLを生成

 

ブロックの内側で認識させるHTTP verbをルーティング名ごとに指定して使います。

 

resources :xxxxxx do
  member do
    get 'xxxxxx'
  end
end

 

なお、member do 〜 end は:onオプションを指定することで省略することができます。

resources :xxxxxx do
  get 'zzzzzz', on: :member
end

 

onを省略することもできます。

 

その場合は、リソースidの値の取得にparams[:id]ではなくparams[:xxxxxx_id]を使う点が異なります。ルーティングヘルパーも、zzzzzz_xxxxxx_urlxxxxxx_zzzzzz_urlに、zzzzzz_xxxxxx_pathxxxxxx_zzzzzz_pathにそれぞれリネームされます。

 

 

-leaning diary, Rails