0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Railsのルーティング(route)

0
Last updated at Posted at 2020-04-28

1.Railsルーター

Railsのルーターは受け取ったURLから、適切なコントローラ内アクションを行う。
ルーターは、「ビューで直接ソースコードの中に固定値をそのまま書き込んでしまう」ことを避けるためにパスやURLを生成することができる。

URLを実際のコードに割り振る

Railsアプリケーションが「 GET /patients/17 」というHTTPリクエストを受け取ると、
リクエストは、特定のコントローラ内アクションにマッチさせるようルーターに要求しており、最初にマッチしたのが、
get '/patients/:id', to: 'patients#show'
だとすると、このリクエストはpatientsコントローラのshowアクション(def show)に割り当てられ、paramsには{ id: '17' }ハッシュが含まれているということである。

コードからパスやURLを生成する

パスやURLを生成することもできる。

ruby
# config/route.rb(ルーティング(viewなどでルーティングヘルパーを使用することが出来る as:))
get '/patients/:id', to: 'patients#show', as: 'patient'

# controllers/application_controller.rb(アプリケーションのコントローラ)
def show
  @patient = Patient.find(params[:id])
end

# views/tasks/show.html.erb(上記に対応するビュー)
<%= link_to 'Patient Record', patient_path(@patient) %>

これで、ルーターによって/patients/17というパスが生成される。これを利用することでビューが改修しやすくなり、コードも読みやすくなる。このルーティングヘルパーではidを指定する必要がない。

rootを使う

rootメソッドを使うことで、Railsがルート'/'とすべき場所を指定できる。

root to: 'pages#main'
root 'pages#main' # 上の省略形

rootルーティングは、ルーティングファイルの先頭に記述する。rootは最もよく使用されるルーティングであり、最初にマッチする必要がある。また、rootルーティングがアクションに渡せるのはGETリクエストのみ。


2.リソースベースのルーティング: Railsのデフォルト

resource :users

をroute,rbに定義すれば、上記一つを定義するだけで、Userコントローラー内に以下の7つのアクションroutesが自動的に作成される。

get '/users', to: 'users#index'
get '/users/new', to: 'users#new'
post '/users', to: 'users#create'
get '/users/:id', to: 'users#show'
get '/users/:id/edit', to: 'users#edit'
patch/put '/users/:id', to: 'users#update'
DELETE '/users/:id', to: 'users#destroy'

また、:onlyや:exceptオプションを使うと、特定のアクションのルートだけ作成できます。
# indexのルートのみ作成
resouces :tasks, only: [:index]

# editとupdateアクション以外の5つのルートを作成
resouces :tasks, except: [:edit, :update]



3.RESTful

RESTfulはREST(REpresentational State Transfer)という設計原則に従うシステムのことを指し、どのようなインターフェイスが良いインターフェイスなのかということの指針です。

RESTの設計原則は、

1.HTTPリクエストはそのリクエストで必要な情報を全てもち、前のリクエストからの状態が保存されている必要がない。
2.個々の情報(リソース)への操作の表現がHTTPメソッドとして統一されている。
3.個々の情報(リソース)がそれぞれ一意なURIで表されている。
4.ある情報(リソース)から別の情報を参照したいときは、リンクを利用する。

Railsでは一般的なブラウザのサポートするGET/POSTだけでなく、PATCH,PUT,DELETEといったHTTPメソッドをサポートし、RESTfulなシステムでは、操作はHTTPメソッドで表現するものであり、URLで表現するものではありません。つまり、URLはなるべく情報(リソース)の名前を表す形にするという考えで作られています。

4.ルーティングの確認方法

$ rails routesコマンドを使って確認する

1つめの方法は、ターミナル上でrails routesと打つこと。
config/routes.rbに記載に記載された内容が反映された結果がターミナル上に表示される。

localhost:3000/rails/infoにアクセスして確認する

rails serverでローカルにサーバをたてている状況であるならば、localhost:3000/rails/infoにアクセスすることでroutingについて表示することができる。GETやPOST、またxxx_pathのような表記もあるので実装中でも確認すると便利。

config/routes.rbを直接読んで確認する

railsでは、config/route.rbにルーティングについての情報を書くため、こちらのファイルを直接見ることでルーティングについて知ることができる。github上で他の人が開発しているアプリのルーティングを確認したい時などはこの方法が有効で、scopeやname_spaceを活用すると良い。エディターを開いてコーディングしている途中であるならこちらを参照するのが早い。



参照
Railsガイド:https://railsguides.jp/routing.html

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?