リンクやボタンをクリックすると、ファイルをダウンロードできるように設定してみた。
環境
# 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用のクラスを指定
表示画面