Ruby

Ruby on Rails ファイルのダウンロードリンクの作成方法

リンクやボタンをクリックすると、ファイルをダウンロードできるように設定してみた。

環境
# rails -v
Rails 5.1.6

# ruby -v
ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux]

クリックからダウンロードまでの動作

リンククリック⇒アクション(コントローラ)呼び出し⇒ファイル自動ダウンロード

viewで作成したダウンロードリンクをクリックすると、アクション(コントローラ記載のdownload)が実行され、send_file関数により自動でダウンロードされる。

router.rb

get 'download', to: 'config_creators#download'

例で、「config_creators」としている部分は、コントローラ名。

Controller

  def download
    download_file_name = "public/master/master.txt"
    send_file download_file_name
  end

アプリフォルダ直下のpublic/master/master.txt というファイルをダウンロードするようにしている。
「send_file ファイル名」 で自動でダウンロードしてくれる。

ファイルパスは、以下のようにもかける。

irb(main):004:0> Rails.root.join('public','master','master.txt')
=> #<Pathname:/アプリフォルダ/public/master/master.txt>

Rails.rootがアプリフォルダパスで、そのパスにpublic、master、master.txtをjoinすることによりファイルパスができあがる。

view

<%= button_to 'ファイルのダウンロード', download_path, method: :get, class: "btn btn-default" %>

class: "btn btn-default"の部分は、bootstrap用のクラスを指定

表示画面

-Ruby