コジマです。
4/19にgamewith様主催のもくもく会に参加致しました。
レポがめちゃめちゃ遅くなってしまいました。。。
前回も参加していて、今回は2回目。
↓前回のレポ↓
2018-3-29 もくもく会レポ #gamewith_moku2
Railsの記事関連はこの時作ったプログラムをベースにしています。
今回はさらにその続きということで、CSVダウンロード機能とアップロードの作成に挑戦しました。
参加者の中にRails経験者がいて、dropzoneというものがいいと教わったのですが、
まだ未熟故コツコツ作っていくことを選択。(dropzoneもあとで勉強します)
CSVファイル作成
ダウンロードボタン作成
ダウンロード機能作成
の手順になるかと思い、そんな感じでレッツゴー
コントローラから作りました。
def csv_download download_file_name = "public/user_csv/userdata.csv" #csv作成 make_csv(download_file_name) #ダウンロードする send_file(download_file_name) end
#ユーザーCSVを作成するメソッド def make_csv(download_file_name) header_row = "ユーザーID,ユーザー名,メールアドレス,作成日時,更新日時" # ユーザー全件取得 @users = User.all #ファイルを開く File.open(download_file_name,'w') do |f| #ヘッダーを作成する f.puts(header_row) #中身を作っていく @users.each do |user| f.puts(user.id.to_s + "," + user.name + "," + user.email + "," + user.created_at.strftime("%Y-%m-%d %H:%M:%S") + "," + user.updated_at.strftime("%Y-%m-%d %H:%M:%S")) end #User.each end #File.open end
ひたすらにゴリゴリと書いていきます。
ロジックとしては難しくないです。
ユーザーデータ全件引っ張り出してファイルに一行ずつ書き込んでいくという形ですね。
ユーザーID、ユーザー名、メールアドレス、作成日時、更新日時を取得しています。
時間はYYYY-MM-DD HH:MI:SSとなるようにフォーマットしています。
writeメソッドは一行しか書けないっぽいので、openとputsを使う方法を採用しました。
次はルーティング
ダウンロード処理はpostになるので、postでルーティングしていきます。
post "users/csv_download" => "users#csv_download" #CSVダウンロード
特別言うことはないかと思います。
ビューにダウンロードボタンを作っていきます。
ユーザー一覧画面にボタンを作成します。
form_tagを使えばよかったですね。
<%= form_tag("/users/csv_download",method: :post) do%> <button class="btn btn-lg btn-primary" type="submit"> CSVダウンロード </button> <%end%>
classはbootstrapで定義されているクラスを使用しています。
こうするとこんな画面ができて、
クリックするとダウンロードできます。
中身はこんな感じ
OKですね。
ファイルのアップロードをして取り込む機能も作りたかったのですが、時間が足りませんでした。
色々やりたいところではありますが、このWebアプリ制作は一度中断しようかと思います。
同参加者の中でRailsを使っている方がいまして、色々教えていただきました。
詳しくは書きませんが、セキュリティ的に宜しくないことをしてしまっていたようで
別アプリを制作することにして、セキュリティも考慮した物を作ることにしてみたいと思ったからです。
まだまだ勉強は必要ですね。
先は長いですが、Railsエンジニアとしてもっと力をつけていかなければと意気込んでいる次第です。
話変わりますが、
本日、メドピア様の勉強会に行こうと思っているので、コジマノテックオリジナル名刺を作成しました。
来られる方いましたら是非名刺をもらってあげてください。
以上、コジマでした。
コメントを書く