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を生成することもできる。
# 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