Railsのルーティング
On 1月 18, 2022 by adminルーティングとはいったい何でしょうか?
ユーザーからアプリケーションへのHTTPリクエストがあったとき、それは正しいコントローラに誘導されるべきです。
Ruby on Railsではルーティングはどのように行われるのですか?
Railsでは、アプリケーションのルートはconfig/routes.rb
に格納されます。 Rails のルーターは URL を認識し、コントローラのアクションにディスパッチします。 また、パスとURLを生成することもできるので、ビューで文字列をハードコーディングする必要がなくなります。 異なるホテルの部屋を予約するアプリケーションを考えて、この仕組みを見てみましょう。
HTTP リクエスト メソッドの種類
アプリケーションは HTTP リクエストを受信し、それに付随するメソッドを受け取りますが、これは次のようなメソッドです。
GET – リソースを取得する
POST – リソースを作成する
PUT – 完全にリソースを更新する
PATCH – 部分的にリソースを更新する
DELETE -リソースを削除する
これらのメソッドはどのコントローラ アクションメソッドが呼ばれるかを判断します。
http リクエストのデコード
アプリケーションがリクエストを受信すると、GET /hotels/1
.
get '/hotels/:id', to: 'hotels#show'
同様に、
get '/hotels', to: 'hotels#index'get '/hotels/:id', to: 'hotels#show'get '/hotels/new', to: 'hotels#new'post '/hotels', to: 'hotels#create'get '/hotels/:id/edit', to: 'hotels#edit'put '/hotels/:id', to: 'hotels#update'delete '/hotels/:id', to: 'hotels#destroy'
TIP: もし、アプリケーションのすべてのルートをリストアップしたい場合は、端末で rails routes
を使用し、もし、特定のリソースのルートをリストにしたい場合は、rails routes | grep hotel
を使用することができます。
Defining resources
受付がすべての予約の記録を保持するように、アプリケーションも config/routes.rb
に独自の記録を持ちます。
Rails.application.routes.draw do resources :hotelsend
を書くことにより、アプリケーションに 7 つのルートを作成し、すべて前述のように Hotels コントローラにマッピングします。
コントローラにこれらのアクションがいくつかしかない場合、次のキーワードで同じものを変更できます。resources :hotels, only:
含めたくないものに名前を付けるキーワード except もあります。
resources :hotels, except:
シングルおよびマルチリソース
時には、単一のリソース、つまり、ID を参照する代わりに単一のページにのみアクセスする必要がある場合があります。
resource :hotels
複数のリソースを定義する必要がある場合、
resources :hotels, :rooms
と同じように動作します
入れ子のリソース
他のリソースの論理的子であるリソースから、/hotels/:id/rooms
入れ子のルートを持つことがあります。 たとえば、アプリケーションに次のモデルが含まれているとします。
class Hotel < ApplicationRecord has_many :roomsendclass Room < ApplicationRecord belongs_to :hotelend
この場合、リソースを次のように宣言します。
resources :hotels do resources :roomsend
この宣言により、/hotels/:id/rooms
、/hotels/:id/rooms/:id
、/hotels/:id/rooms/new
などのネストした URL にアクセスできます。
さらに勉強を続ける
ルーティングについてもっと深く知りたい場合は、「外部から見るRailsルーティング」http://guides.rubyonrails.org/routing.html を参照してください。
カバー写真:Javier Allegue Barros on Unsplash (https://unsplash.com/photos/C7B-ExXpOIE)
コメントを残す