1|2|3【5】「ファイルとデータの送信」機能ビューをレンダリングしてレスポンスする以外にも、ファイルやデータを送信する機能もActionControllerには用意されています。既存のファイルをダウンロードさせるには「send_file」メソッドを使います。‘inline’end「send_file」の引数にはファイルが存在しているパスを渡します。オプションでファイル名(filename)やHTTPレスポンスヘッダーのContent-Type属性(type、デフォルト:application/octet-stream)、Content-Disposition属性(disposition、デフォルト:attachment)を指定できます。既存のファイルではなくバイナリデータを送信する場合は「send_data」メソッドを使います。使い方は引数に送信するデータ自身を取り、オプションは「send_file」と同じです。‘application/text’endアクションとパスの対応を定義する「ルーティング」これまでもルーティングは「config/routes.rb」で定義してきましたが、ここではより詳しく紹介します。リソースへのルーティングRailsはHTTPメソッド(GET、POST、PATCH(PUT)、DELETE)を適切に使い分けてリソースのCRUD(作成、読み込み、更新、削除)機能を実装するRESTfulな設計を標準としています。そのため、ルーティングでは「resources」一行を宣言するだけで引数にとったリソースのCRUD機能に必要な「index」「show」「new」「create」「edit」「update」「destroy」アクションとパスの対応が定義されます。books#destroy「only」オプションや「except」オプションを使うことで、これらのルーティングを指定したり制限したりすることができます。users#showまた「resources」はブロックを取ることができ、その中で標準ではないアクションや従属するリソースへのルーティングを定義できます。users#show「resources」のブロック内で宣言されている「get」メソッドと「post」メソッドは、おさらいで紹介したそれらとは異なり、引数にアクション名をとります。そのアクションが特定のレコードを対象としているか、そうでないかを示す「on」オプションも渡しています。デフォルトでは「:member」をとります。この特定のレコードを対象しているかどうかについて、「collection」メソッドまたは「member」メソッドに渡すブロックの中で「on」オプションなしで「get」メソッドなどを定義することもできます。%i(index)endこれによるルーティングは一つ前と同じものが定義されます。名前空間付きルーティングルーティングの定義に名前空間を付けることができます。(以下略)このとき「app/controllers/admin/books_controller.rb」の「Admin::BooksController」がコントローラーとして呼び出されます。管理画面などを作りたいときは名前空間をこのように分けるとよいでしょう。ルートの設定アプリケーションのURLのルートや、名前空間のルートにリクエストがあったときに対応するアクションを定義するには、次のように宣言します。今回はコントローラーをつかさどる「ActionController」の機能とルーティングについて解説してきました。この領域は筆者が初心者のころ、アクション間でデータを渡せないことなどを勘違いして非常に苦しんだ領域でした。あるとき、ルーティング自体にアクションの処理をブロックで渡す、Railsとは別のフレームワーク「Sinatra」を知り、そこで「Railsの仕組みもほとんど同様なのだ」と理解できてからは面白いようにRailsの設計が簡単になりました。コントローラーとルーティングはアプリの設計には必須の知識です。作って経験を蓄えてください。次回はビューをつかさどるActionViewについて解説していきます。慶(Rails技術者認定シルバー試験問題作成者)平成2年大阪生まれ。2006年から高専で情報工学を学んでいたが当時は所謂プログラミングができない工学生だった。卒業後、高専の専攻科に上がったもののマンネリ化したキャンパスライフに飽きたため休学して渡豪。Railsなどでアプリケーションを作ることを覚える。Railsアプリケーションの開発業務に従事している。好きなメソッドはinject。剛司(Ruby業務開発歴7年)兵庫県生まれ。していた言語はJavaとサーバーサイドJavaScript。2007年よりITコンサル会社に転職し、Rubyと出会って衝撃を受ける。Railsで置き換えるプロジェクトに従事。Railsのプラグインやgemも開発。2013年より、株式会社アジャイルウェアに所属。Railsを使って企業向けシステムを構築する業務に従事。好きなメソッドはtap。関連記事Railsで目指せ、情熱エンジニア(9):Railsのコントローラをテストする前回はインテグレーションテストとしてCucumberでテストを作成しました。今回はユニットテストとして、RSpecを使ってコントローラのテストを作成しますRailsで目指せ、情熱エンジニア(10):コントローラとモデルをリファクタリングする前回用意したRailsアプリのコントローラのテスト(スペック)をもとに、今回はコントローラとモデルのリファクタリングの実例を紹介します。3rdRailによるRailsプログラミング入門(5):RailsアプリにおけるControllerの位置付け今回からControllerクラスの開発ステップを紹介する。メールマガジンをご購読ください。申し込みページへITmediaはアイティメディア株式会社の登録商標です。