椛島千愛です。寒い日が続きますがみなさん、いかがお過ごしでしょうか?私は先日、会社の新年会と同期だけの遅めの新年会を行いました。和気藹々とお酒を飲みながら、仕事のことやプライベートのことを話しました。やはり、同期の存在は心強いし、最高の仲間です。今回の同期の飲み会は、手羽先が有名なお店に行ったのですが、6人で30人前完食していました(笑)みんな食べ過ぎ・・・!
さて、Ruby on Railsの勉強は順調でしょうか?私もブロンズ試験に向けて、みなさんと同様コツコツ理解を深めています。前回は、環境設定とRailsで使用されているMVCアーキテクチャーの考え方を学習しました。今回は、ルーティングについて一緒に学習していきたいと思います。(認定教材第7章の内容)
本日のコンテンツ:
1.そもそもルーティングとは?
2.resourcesメソッドを使ったルーティング
3.ネストしたルーティング
1.そもそもルーティングとは?
ルーティングについて詳しく見ていく前に、Railsにおけるルーティングの定義についてみていきましょう。
Railsにおけるルーティングとは、受信したURLから実行すべきアクションを判断するシステムのことです。ルーティングは、config/routes.rbの中に記述していきます。また、ルーティングは、ビューでパスやURLを直接ハードコードすることを避けるためにパスやURLを生成することができます。
Railsでは、原則としてRESTfulなインターフェースに沿ってするのが基本になります。このRESTとは、リレーショナルデータベース管理システムに必要な4つの基本的機能で
ある、データの作成(Create)、読み出し(Read)、更新(update)、削除(Delete)をHTTPRequestの各メソッド(GET/POST/PUT/DELETE)に対応させて、自由に作成/読み出し/更新/削除できるもの(リソース)として扱うアーキテクチャーのことです。下記にわかりやすく表にまとめました。
この考え方をもとにして、下記は私がモデルとモデルを扱うコントローラーを自動的に生成してくれるScaffoldというツールを使って作った簡単な単語帳です。scaffoldは便利なツールなのですが、ちゃんと知った上で使わないと、親切丁寧になんでも自動で作ってくれるので、どこに何があるかわからな〜い!!っていう事態になります。(ちなみに私は何度もなって、その度に同期を質問攻めにしました(笑))なので、慣れるまでは自分で必要なファイルを作ることをお勧めします。
rails g scaffold モデル名 カラム名:型名・・・
例. rails g scaffold words words:string reading:string meaning:string category:integer
と入力して作成しました。上記のコードにプラスして、データベースに実際にwordsテーブルを作成するために、Rakeタスクのdb:migrateを実行します。
rake db:migrate
これをマイグレーションといいますが、このマイグレーションに関しては、次の回で詳しく取り上げたいと思います。今回は、上記の単語帳を題材にして一緒に勉強していきましょう。
2.resourcesメソッドを使ったルーティング
ルーティングの設定に関して、もちろん手動で設定する方法もありますが、resourcesメソッドを使いルーティングを設定したほうがとても便利です。resourcesメソッドに対象となるリソース名を指定するだけで、先に挙げたindex、show、new、create、edit、update、destroyの7つに関してルーティングが設定されます。今回例に挙げた単語帳のリソース名は、wordsになります。どのように記述するかみてみましょう。
コーディングする部分は、configフォルダの中のroutes.rbというファイルの中になります。その中身を
resources :words
と記述した後、
その後に、コマンドで
rake routes
を実行します。このコマンドを実行することで、index、show、new、create、edit、update、destroyの7つアクションの繋がりが確認できます。また、このアクションを限定した場合は、onlyやexpectをroutes.rbに記述します。onlyはそのアクションだけ使用したい場合に、exceptはそのアクション以外を使用したい場合に使用します。例えば、
resources :words, only: [:index, :show, :edit] ※この場合は、index、show、editだけ使用可
resources :words, except: :destroy ※この場合は、destroy以外は使用可
となります。それぞれ入力して違いを試してみてください。
3.ネストしたルーティング
上記の単語帳に管理画面をつけ、ユーザーによって表示を切り替えることができます。例えば、管理画面をUsersと名付けた場合のルーティングの書き方は、下記のようになります。
resources :users do
resources :words
と、記述すると階層化されます。Usersの中にWordsが入ります。上記の書き方を行うことにより、ユーザーによって切り替えが可能になります。余談ですが、この記述を逆にすると大変なことになるので、興味がある方はやってみてください。
ルーティングは、他にもネスト以外に様々なオプションがあります。
例えば、namespaceやcollection、memberがあります。それぞれ活用の仕方があるので、調べてみてください。
ルーティングの内容が大まかに理解できたら、模擬問題ではどのように出題されているか確認しましょう!一般社団法人Rails技術者認定試験運営委員会のHPにて現在、フリー公開されています。この機会にダウンロードしましょう。
〜エンディング〜
今回は、ルーティングに絞って勉強しましたが、いかがでしたでしょうか?このコラムも次回が最後になります。思った以上に早かったです。最終コラムは、マイグレーションについて一緒に勉強していく予定です。まだまだインフルエンザや風邪が流行っていますので、体調に気をつけてお過ごし下さい。最終回のコラムもお楽しみに♪