前提・実現したいこと
rails内のディレクトリにモデルネームid(ここではindex.id)名をつけたサブディレクトリを作成してサブディレクトリごとに画像ファイルをダウンロードするアクションを作成したい。
発生している問題
indeicesコントローラーにアクションdownloadを作成、ここで動的にパスを生成するコードを書いたが、ダウンロードが出来ず、
download 失敗 - サーバーに問題が発生しました
となる。
ちなみにZipFileGeneratorクラスは正常に動きます。
controller
1def download 2 3 directory_to_zip = "#{Rails.root}/public/downloads/name_no#{:id}" 4 output_file = "#{Rails.root}/public/downloads/name_no#{:id}.zip" 5 zip_file_generator = ZipFileGenerator.new(directory_to_zip, output_file) 6 7 zip_file_generator.write 8 send_file(output_file, filename: "image#{:id}.zip", disposition: 'attachment', stream: true) 9 10 end
error
1No such file or directory @ dir_initialize - /home/ec2-user/environment/distributeImage/public/downloads/name_noid
binding.pryをdef download直下に置き、paramsを調べると
[1] pry(#<IndicesController>)> params => {"controller"=>"indices", "action"=>"download", "id"=>"5"}
とindex.idは渡ってきているので、指定の仕方だけだと思った。
ちなみにルーティングは、
resources :indices do resources :pictures, only: [:create, :new] get 'downloads' => 'indices#downloads', on: :collection get 'download' => 'indices#download', on: :member end
試したこと
コントローラー(downloadアクション)にviewに値を渡す
@index = params['index']['id']
を指定、
結果、nillが返ってきました。
undefined method `[]' for nil:NilClass
binding.pryで"id"が渡ってきているのに@indexだと空だといわれるのはなぜなのかが知りたいです。
よろしくおねがいします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/10/05 06:22
退会済みユーザー
2018/10/05 06:23