概要
Ruby On Rails 5 で投稿機能を作っています。
アップローダーはCarrierWave、投稿画像についてはサムネイル化したかったのでRMagickを導入しています。
かかる中、以下のような設定をしたことで、pdfファイルのアップロードができなくなり詰まってしまいました。
やりたいこと
carrierWaveを使って画像、PDFをアップロードできるようにしたい。ただし、画像についてはRMagickを使ってサムネイル化させたい。
現状
RMagickを使わない場合(サムネイル化しない)、はうまく機能しています。
現状のアップローダーの設定は以下の通りです。
ArticleUploader
1class ArticleUploader < CarrierWave::Uploader::Base 2 3 include CarrierWave::RMagick 4 5 # サムネイルを生成する設定 6 version :thumb do 7 process :resize_to_limit => [300, 300] 8 end 9 10 # jpg,jpeg,gif,png pdfしか受け付けない 11 def extension_white_list 12 %w(jpg jpeg gif png pdf) 13 end 14 15 protected 16 def secure_token 17 var = :"@#{mounted_as}_secure_token" 18 model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.uuid) 19 end 20 21 if Rails.env.production? 22 storage :fog 23 else 24 storage :file 25 end 26 27 def store_dir 28 "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 29 end 30 31 def cache_dir 32 "#{Rails.root}/tmp/uploads" 33 end 34 35end 36
PDFがアップロードできない原因と解決方法の自己考察
上記コード内の「#サムネイルを生成する設定」が効いてしまって画像以外のアップロードができないようです。
このため、
該当箇所を拡張子が(jpg jpeg gif png)なら「#サムネイルを生成する設定」を有効、
拡張子が(pdf)なら「#サムネイルを生成する設定」を無視する、
といったような、if文を作れば良いのでは?と考えています。
しかしながら、この条件式の作り方がわからず困っております。
良い解決策がございましたらご教授いただけますと幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/13 04:30