DAY27 Ruby on rails Routing(2)

TOKHEE·2024년 4월 29일
0

2. リソースルーティング

5) 単数形リソース

  • 使用理由
    あるリソースがユーザーIDのような識別子なしにアクセスされる場合があります。
    例えば、/profileアドレスで常に現在ログインしているユーザーのプロフィールを表示したい場合!
    このような場合には、URLにID部分(/profile/:id)を含めずに、直接特定のアクションにマッピングしたいと思うかもしれません。

  • /profileというパスでアクセスしたときにusersコントローラーのshowアクションを呼び出すように設定するコード

get 'profile', to: 'users#show'
  • もっと簡単にアクション名だけを指定することも可能で、これによりRailsは自動的にこのパスをshowアクションにマッピングします。
get 'profile', to: :show

単数形リソースルート

resource :geocoder
  • この宣言により、/geocoderに関連する様々なHTTPリクエストを処理できる6つのルートが自動的に生成されます。
  • これらのルートはすべてGeocodersControllerにマッピングされます。
HTTP動詞パスコントローラー#アクション用途
GET/geocoder/newgeocoders#newジオコーダーを作成するためのHTMLフォームを返す
POST/geocodergeocoders#create新しいジオコーダーを作成する
GET/geocodergeocoders#show唯一のジオコーダーリソースを表示する
GET/geocoder/editgeocoders#editジオコーダーを編集するためのHTMLフォームを返す
PATCH/PUT/geocodergeocoders#update唯一のジオコーダーリソースを更新する
DELETE/geocodergeocoders#destroyジオコーダーリソースを削除する

パスとURLヘルパー

  • これらのヘルパーはURLバージョンも持っており、同じパスに対して完全なURL(ホストとポートを含む)を生成できます。
  • 例えば、new_geocoder_urlはhttp://example.com/geocoder/new のような完全なURLを返します。
  • 複数形リソースと同様に、_urlで終わる同じヘルパーはホスト、ポート、そしてパスプレフィックスを含みます。
ヘルパー関数返り値説明
new_geocoder_path/geocoder/new新しいジオコーダーを作成するためのフォームページのパス
edit_geocoder_path/geocoder/editジオコーダーを編集するためのフォームページのパス
geocoder_path/geocoder唯一のジオコーダーリソースを表示するページのパス

6) コントローラーネームスペースとルーティング

  • ネームスペース: 管理者のような特定のグループのコントローラーをまとめて管理するときに使用します。URLとコントローラーのパスの両方にadminのような接頭

辞が付きます。

  • スコープ: URLパスにのみadminのような接頭辞を付けたいときに使用します。コントローラー名やルートヘルパー名は変更されません。

ネームスペースの使用理由

  • 特定のコントローラーグループを別のパスの下にまとめたいときに使用します。
  • 例えば、管理者用の機能をAdmin::ネームスペースの下に置きたい場合、これらのコントローラーをapp/controllers/adminディレクトリの下に位置づけます。

ネームスペースルーティング例

namespace :admin do
  resources :posts, :comments
end
  • このコードはAdmin::PostsControllerとAdmin::CommentsControllerに対するルートを自動的に生成します。

  • GET /admin/postsはadmin/posts#indexアクションを呼び出し、admin_posts_pathヘルパーを使用してアクセスできます。

  • GET /admin/posts/newは新しい投稿を作成するためのフォームページに移動し、new_admin_post_pathを通じてアクセスできます。

  • その他にもcreate, show, edit, update, destroyアクションに対するルートが設定されています。

スコープを使用したルーティング

  • Admin::ネームスペースなしで通常のPostsControllerに/admin/postsでルーティングしたい場合
scope '/admin' do
  resources :posts, :comments
end

このように使用します。

0개의 댓글

관련 채용 정보