【Rails】CSVファイルとして出力(ダウンロード)する方法

Ruby on RailsでCSVファイルとして出力(ダウンロード)する方法を紹介します。

【Rails】CSVファイルとして出力(ダウンロード)する方法

例としてユーザIDに紐づいたユーザ情報をCSV出力します。「CSVダウンロード」ボタンを押下すると、ユーザIDをusersコントローラのcsvメソッドに送ります。

・index.html.erb

 

viewから受け取ったユーザIDからfindメソッドでユーザ情報を取得します。

csvファイルのヘッダーを生成するためにcreate_csv_file_header()メソッドを呼び出します。ここでは「user_test_file_name_」という文字列に年月日を足したファイル名を引数にしています。

create_csv_file_header()メソッドは他のコントローラでも使用することを考えて、ApplicationControllerに定義し、継承する形で使います。

・users_controller.rb

 

CSVファイルのヘッダーを生成します。

ダウンロードするブラウザがIEの場合はファイル名の文字列の文字コードを変換します。IE6からのユーザエージェントは「MSIE」、IE10からは「Trident」が表記されています。

=~演算子を使ってIEのユーザエージェントにパターンマッチした場合、文字列の文字コードを変換します。

・application_controller.rb

request.user_agentでHTTP_USER_AGENTを取得できます。実際にrequest.user_agentでログを出力してみると以下のようになります。

 

CSVファイルとして出力するため、〇〇.csv.rubyという拡張子のファイルを作成します。

generateメソッドを使ってた文字列をCSV形式に変換処理しています。

・csv.csv.ruby

以上、Ruby on RailsでCSVファイルとして出力する方法でした。