前提・実現したいこと
railsを使ってマシンからブラウザにアップロードしたファイルをDBに保存して、
保存したファイルをダウンロードするウェブアプリを作りたいです。
発生している問題・エラーメッセージ
自作アプリを保存するウェブアプリを作成しています。名前や作者名、ファイルの概要を入力し、ファイルデータをbinaryで保存した後、そのファイルをダウンロードしたいのですが、route.rbの記述がいまいちわかりません。。。
今作成中のウェブアプリの概要として
1・index.html.erbから「新規作成」リンクをクリックしてnew.html.erbに移動
2・new.html.erbアクションで項目の入力とファイルをアップロードをし、公開ボタンを押す
3・index.html.erbで公開されているファイルの名前と作者名を表示
4・「内容を表示」リンクをクリックしてshow.html.erbに移動
5・show.html.erbで「ダウンロード」ボタンを押す
6・該当のファイルをダウンロードする←いまここで詰まってます。
該当のソースコード
route.rbの概要ソースコードです。
GETとPOSTの使い方がわかりません。
Rails.application.routes.draw do
resources :applodes
root 'applodes#index'
resources :show
root 'applodes#show'
get 'applodes/:id/show' , to:'applodes#show'
delete '/', to:'applodes#show'
get 'applodes/:id/show', to: 'applodes#get_file'
post 'applodes/:id/show',to: 'applodes#get_file'
applodesコントローラのget_fileアクションです。
ダウンロードボタンが押された際にこのアクションを起動するように設定したいです。
def get_file
file = App.find(params[:id])
send_data file.data, disposition: :inline, type:'file/zip'
end
show.html.erbのソースコードです。
一番下のダウンロードボタンのパスですが、ダウンロードした後は今のページにとどまるようにしたいです。
ここに問題に対して試したことを記載してください。
route,rbのpostを以下のようにしても、idが見つからない旨のエラーが出てしまいました。
post '/',to: 'applodes#get_file'
エラー内容
Couldn't find App with 'id'=:id
def get_file
file = App.find(params[:id])
send_data file.data, disposition: :inline, type:'file/zip'
end
end
補足情報(FW/ツールのバージョンなど
rails ver5.2.3
ruby 2.6.3p62
cloud9での開発をしています。railsを学習し始めて3か月程度の未熟者です。。。
できればrouteの書き方を特に教えていただけると嬉しいです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。