railsで画像アップロード()機能を作っているのですが、
バリデーションにひっかかった際に、次の画面までアップロードした画像ファイルを保持したいです。
carrierwaveを使用してとAWS S3へ保存しています。
調べたところ、view側にhidden_fieldで「**_cache」というので維持できるそうですが、うまくいかないです。
どうすれば次の画面までファイルを保持できるでしょうか?
・app/controllers/user_controller.rb(一部省略)
ruby
1class UsersController < ApplicationController 2 def edit 3 @user = current_user 4 end 5 6 def update 7 @user = current_user 8 if @user.update(user_params) 9 redirect_to settings_path, notice: "設定を保存しました。" 10 else 11 render :edit 12 end 13 end 14 15 private 16 17 def user_params 18 params.require(:user).permit(:name, :image, :image_cache) 19 end 20end
・app/views/users/edit.html.erb(一部省略)
ruby
1<%= form_with model: @user, url: edit_path, local: true, method: :patch do |f| %> 2 <%= f.file_field :image, class: "form-control-file", accept: "image/jpeg, image/png, image/gif" %> 3 <%= f.hidden_field :image_cache %> 4<% end %>
・models/user.rb
ruby
1class User < ApplicationRecord 2 mount_uploader :image, ImageUploader 3end
・app/uploaders/image_uploader.rb
ruby
1class ImageUploader < CarrierWave::Uploader::Base 2 include CarrierWave::MiniMagick 3 4 storage :fog 5 6 def store_dir 7 "uploads/users/image" 8 end 9 10 def extension_whitelist 11 %w(jpg jpeg gif png) 12 end 13 14 def filename 15 "#{model.id}.jpg" 16 end 17 18 def auto 19 manipulate! do |image| 20 image = image.auto_orient 21 image = yield(image) if block_given? 22 image 23 end 24 end 25 26 process :auto 27 process :convert => "jpg" 28end
・config/initializers/carrierwave.rb
ruby
1require 'carrierwave/storage/abstract' 2require 'carrierwave/storage/file' 3require 'carrierwave/storage/fog' 4 5CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:].\-+]/ 6 7CarrierWave.configure do |config| 8 config.fog_provider = "fog/aws" 9 config.fog_credentials = { 10 provider: 'AWS', 11 aws_access_key_id: ENV["AWS_ACCESS_KEY_ID"], 12 aws_secret_access_key: ENV["AWS_SECRET_ACCESS_KEY"], 13 region: 'ap-northeast-1' 14 } 15 config.cache_storage = :fog 16 config.fog_public = true 17 config.fog_directory = 'example' 18 config.asset_host = 'https://example.s3-ap-northeast-1.amazonaws.com' 19 config.fog_attributes = { cache_control: "public, max-age=#{100.days.to_i}" } 20end
以上を見て変なところや何か思いつくことがあれば教えてください。
よろしくお願いいたします。
あなたの回答
tips
プレビュー